一,SpringMVC处理全局异常
1.1 使用@ExceptionHandler注解
第一步:创建一个基类的BaseController,用来实现全局异常。
使用@ExceptionHandler注解标注handleException()方法。
package com.lmc.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
public class BaseController {
@ExceptionHandler
public String handleException(HttpServletRequest req, Exception ex){
return "error";
}
}
注意:handleException() 方法有两个参数,不能省略。
- request:当前发生异常的请求
- exception:异常对象
第二步:定义一个普通控制器,继承BaseController基类
package com.lmc.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
@org.springframework.web.bind.annotation.RestController
public class RestController extends BaseController {
@RequestMapping("hello")
public String sayHello(){
if(true) throw new RuntimeException();
return "say hello";
}
}
1.2自定义异常处理类
第一步:创建一个自定义异常处理类
public class MyExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
ModelAndView mv = new ModelAndView();
mv.addObject("msg", "服务器发生异常,请稍后再试!");
mv.setViewName("error");
//输出异常的跟踪信息
ex.printStackTrace();
return mv;
}
}
第二步:在SpringMVC配置文件中配置该异常处理类
bean class="com.lmc.MyExceptionHandler"/>
二,SpringMVC日期类型处理
如果表单提交过来的数据是日期格式,但是控制器使用Date类型接收该参数时,会提示类型转换失败。
解决方法:
2.1 使用@DateTimeFormat
(1)使用@DateTimeFormat指定转换格式
public class User{
private String name;
private String password;
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;
}
(2)控制器中加入一段数据绑定代码。
@Controller
public class UserController{
@InitBinder
public void init(WebDataBinder binder){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
binder.regiesterCustomEditor(Date.class,new CustomDateEditor(sdf,true));
}
}
这样每次访问该控制器方法的时候都会执行@InitBinder绑定的方法
2.2 配置全局日期类型转换器
首先,定义一个日期转换器类,该类实现Converter接口。
package com.lmc.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
/**
* 对提交的表单日期字符串类型转换成日期类型
* @author Administrator
*
*/
@Component
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
return format.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
然后在Spring的配置文件中进行配置
<!-- 启动注解功能 -->
<mvc:annotation-driven conversion-service="dateConvertor"/>
<!-- 定义全局的日期转换器 -->
<bean id="dateConvertor" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.lmc.utils.DateConverter"/>
</list>
</property>
</bean>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81661.html