SpringMVC--全局异常处理
Posted lxx-1843693653
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC--全局异常处理相关的知识,希望对你有一定的参考价值。
- 在某个controller中使用ExceptionHandler可以处理当前controller中抛出异常
- 这个规则与controller中其他方法规则是一样的
- 这个ExceptionHandler方法可以写很多个,正对不同的异常进行不同的处理
- 方法参数中可以增加一个异常对象,用来获取
@RequestMapping("/sqlerror")
public String sqlerror()throws SQLException{
throw new SQLException("抛出SQL异常");
}
//捕获sql异常
@ExceptionHandler(SQLException.class)
public String error(Model model, SQLException ex) {
model.addAttribute("message",ex.getMessage());
return "error";
}
@RequestMapping("/ioError")
public String ioError()throws IOException{
throw new IOException("抛出IO异常");
}
//捕获IO异常
@ExceptionHandler(IOException.class)
@ResponseBody
public Map<String, String> error(IOException ex) {
return Collections.singletonMap("message",ex.getMessage());
}
在注册是获取时间
@RequestMapping("/register")
@ResponseBody
//@DateTimeFormat(pattern = "yyyy/MM/dd")与@InitBinder冲突
//使用@DateTimeFormat(pattern = "yyyy/MM/dd")就不能使用@InitBinder
public String register( Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
return format.format(date);
}
@InitBinder
public void initBinder(WebDataBinder binder){
//可以为当前controller绑定一个时间转换器
binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
}
在前端取值el表达式来接
<h1>错误页面</h1>
<p>${message}</p>
这样异常就会被看到了
如果所有的controller都想走这个异常就建一个关于异常的实现类,
如果所有的controller都想获取时间那么就一并写
/*
* 可以批量为多个controller统一增加异常处理和InitBinder
* */
//批量根据某些包下的所有Controller增加功能
//但所有controller必须在同一个包下
@ControllerAdvice(basePackages = {"com.lanou.demo.controller"})
//指定为某些指定的controller增加功能
@ControllerAdvice(assignableTypes = {DateController.class})
//指定为某个类所在的包下的所有controller增加功能
@ControllerAdvice(basePackageClasses= {BookController.class})
//为哪些注解所标记的controller增加功能
@ControllerAdvice(annotations = {Controller.class, RestController.class})
//与RestController意义一样
@RestControllerAdvice
public class SqlExceptionAdvice {
这样所有的方法就都能捕获异常
获取时间
//捕获IO异常
@ExceptionHandler(IOException.class)
@ResponseBody
public Map<String, String> error(IOException ex) {
return Collections.singletonMap("message",ex.getMessage());
}
@InitBinder
public void initBinder(WebDataBinder binder){
//可以为当前controller绑定一个时间转换器
binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
}
}
以上是关于SpringMVC--全局异常处理的主要内容,如果未能解决你的问题,请参考以下文章