欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring异常处理和Rest

程序员文章站 2022-07-14 11:43:08
...

Spring的异常处理

  1. 配置一个系统提供的异常处理器
    出现什么异常就跳转到对应的页面

    <bean id="exceptionResolver  class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    	<property name="exceptionMappings">
    		<props>
    			<prop key="java.lang.Exception">error2</prop>
    			<prop key="java.lang.RunTimeException">error1</prop>
    		</props>	
    	</property>
    </bean>
    
  2. 自定义异常处理器–(全局异常)
    实现HandlerExceptionResolver接口,让对应的异常跳转到对应的页面

    @Override
    public ModelAndView resolverException(HttpServletRequest arg0,HttpServletResponse arg1,Obbject arg2,Exception e){
    	ModelAndView mav = new ModelAndview();
    	if(e instanceof RuntimeException){
    		mav.setViewName("error");
    	}else if(e intstanceof Exception){
    		mav.setViewName("error2");
    	}
    	return mav;
    }
    
  3. 局部异常处理
    只针对一个具体的控制器起作用(异常方法中Exception的参数必须有)

    @ExceptionHandler
    	public String foo(Exception e){
    		System.out.println(e.getMessage());
    		return "error3";
    	}
    
  4. 文件上传
    4.1 写一个文件上传的页面注意三点:
    第一必须以post方式提交 ,第二设置编码方式 entype=“multipart/form-data”,第三 type=“file”
    4.2 编写一个文件上传的控制器接收文件数据和非文件数据,这个控制器需要依赖于文件解析器,文件解析器又依赖于文件上传的jar 包。

    <!--文件解析器-->
    <bean id="multipartResolver",class="org.springframe.web.multipart.commons.CommonsMultipartResolver">
    	<property name="maxUploadSize"  value="10240"></property>
    	<property name="resolverlazily"  value="true"></property>//延迟处理
    </bean>
    
  5. SpringMVC的控制器方法如何返回JSON?
    5.1 单建一个基于标注的mvc
    5.2 在控制器中编写一个控制器方法

    @RequestMapping("/请求的路径")
    public 要转换JSON的数据类型 方法名任意(参数任意){}
    

    5.3 为了处理返回的数据为JSON需要加一个@ReponseBody ,这个标注依赖于JSO的转换包。
    @ReponseBody(把数据转换成JSON,同时告知mvc返回值不要经过视图处理器)。

  6. 如何返回多个对象对应的JSON?

    @RequesMapping("/login3.do")
    @ReponseBody
    public Map<Stirng,Object> Login3(String acc_no,String acc_password){
    	Map<String,Object> res =new HashMap<String,Object>();
    	if("abc".equals(acc_no)&&"123".equals(acc_password)){
    		XdlBankAccount account = new XdlBankAccount(0,acc_no,acc_password,1);
    		res.put("account",account);
    		return res;
    	}
    	res.put("account",null);
    	return res;
    }
    
  7. 什么是rest?
    REST即表述性状态传递(Representational state Transfer,简称REST)
    是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。
    这个软加架构基于Http协议,它可以提高系统的可伸缩性,降低应用之间的耦合度,便于分布式应用程序的开发。

  8. rest的两个核心规范
    定位资源的url做了限定:把原来的基于操作的设计改成了基于资源的设计
    对资源的操作做了限定: Http协议的请求方式上 Get用来查询,Post用来增加,put更新,Delete删除

  9. 什么是restful?
    符合rest 风格和约束的应用程序叫restful

  10. SpringMVC对rest的支持
    10.1 搭建一个基于标注的mvc
    10.2 在控制器方法上支持对应的请求方式

    @RequestMapping(value="/account/{变量名}",method="RequestMenthod.GET")
    

    10.3 获取路径变量上的值

    @PathVariable("路径变量名")   加载控制器参数上
    

    10.4 rest请求的路径是没有后缀的,所以需要把DisatcherServlet中的url-pattern改成支持所有请求的 /
    10.5 如果改成 / 则所有的静态资源被拦截

    <!--放行静态资源-->
    <mvc:default-servlet-handler/>
    web.xml中配置
    <servlet-mapping>
    	<servlet-name>default</servlet-mapping>
    	<url-pattern>*.js</url-pattern>//放行js静态资源
    </servlet-mapping>
    
相关标签: 知识点总结