SpringMVC
异常处理
介绍:
Spring MVC中提供了一套通用的异常处理方案,利用这套异常处理方案可以有效的处理Web项目中的异常.
原理:
SpringMVC提供了HandlerExceptionResolver接口,并提供多个用于不同场景的实现类.通过捕获 程序产生的异常,并将该异常与Spring容器中的异常处理对象匹配.匹配成功后,由异常处理对象的方法进行异常处理,并返回视图和异常信息.
HandlerExceptionResolver实现类:
AnnotationMethodHandlerExceptionResolver[未配置<mvc:annotation-driven/>时,使用]
ExceptionHandlerExceptionResolver [配置<mvc:annotation-driven/>时,使用]
ResponseStatusExceptionResolver [始终使用]
DefaultHandlerExceptionResolver [始终使用]
SimpleMappingExceptionResolver [需要在配置文件中注册,才能使用]
说明: DispatcherServlet默认装配HandlerExceptionResolver
ExceptionHandlerExceptionResolver
介绍:
ExceptionHandlerExceptionResolver用于解析@ExceptionHandler标注的异常处理方法,在异常处理方法中可以将异常传到指定页面.
@ExceptionHandler作用:
1.@ExceptionHandler捕获的异常可以是系统的或自定义的.
2.@ExceptionHandler捕获异常并交给标注方法处理后,后台将不再显示默认异常信息.
3.若@ExceptionHandler未捕获到当前异常类型,将按照系统默认方式处理[抛出异常,显示异常信息]
优先级:
1.当处理方法发生异常时,优先将异常交给本类中@ExceptionHandler标注的方法.
2.若本类含有多个@ExceptionHandler标注的方法,异常将交给最接近异常类型的方法.
3.若本类中没有@ExceptionHandler标注的方法,将交给@ControllerAdvice标注类中的@ExceptionHandler标注的方法.
SimpleMappingExceptionResolver:
介绍:
SimpleMappingExceptionResolver以配置文件方式,注册将要捕获的异常[系统或自定义异常],并指出捕获异常后转向的视图.
开发步骤:[只需编写SpringMVC配置文件即可]
<bean id="匿名" class="SimpleMappingExceptionResolver类全名">
<!-- 定义存入到request容器时的名称: 默认名称为"exception" -->
<property name="exceptionAttribute" value="匿名" />
<!-- 定义捕获的异常 -->
<property name="exceptionMappings">
<props>
<prop key="异常类全名1" >视图1</prop>
<prop key="异常类全名2" >视图2</prop>
......
</props>
</property>
</bean>
JSON处理
|----fastjson下返回JSON:
第1步: 添加jar包
SpringMVC基本jar
fastjson-1.2.13.jar
第2步: 编写SpringMVC配置文件
在SpringMVC配置文件常规配置下,添加<mvc:annotation-driven />
第3步: @ResponseBody和@RequestMapping标注处理方法
注意: 返回值为 JSON字符串 或 POJO/集合对象[注册FastJSON解析器]
第4步: 编写页面,访问JSON请求
使用Ajax请求JSON,也可以直接请求JSON[数据会直接展示到页面上]
|-----乱码处理:
局部处理:
@ResponseBody
@RequestMapping(value = “/test1”,produces = {“application/json;charset=UTF-8”})
处理方法声明…
全局处理:
<mvc:annotation-driven>
<!--注册消息转换器-->
<mvc:message-converters>
<!--注册字符串消息转换器-->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
|-----日期处理:
局部处理:
@JSONField(format=“日期格式”)
private Date 属性名;
注意: 被解析的日期数据,必须位于String类型的JSON数据中.
全局处理:
1.处理方法的返回值必须为POJO/集合对象,不能是字符串格式的JSON数据[无法确定字符串中哪些数据是日期数据].
2.无法自定义全局日期处理时的日期格式,只能使用FastJSON默认的日期格式: yyyy-MM-dd HH:mm:ss
<mvc:annotation-driven>
<!--注册消息转换器-->
<mvc:message-converters>
<!--注册FastJSON消息转换器-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="features">
<list>
<value>WriteDateUseDateFormat</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>