@ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理。最常用的就是异常处理

统一异常处理

需要配合@ExceptionHandler使用。

当将异常抛到controller时,可以对异常进行统一处理,规定返回的json格式或是跳转到一个错误页面

//全局异常捕捉处理
@ControllerAdvice
public class CustomExceptionHandler { @ResponseBody
@ExceptionHandler(value = Exception.class)
public Map errorHandler(Exception ex) {
Map map = new HashMap();
map.put("code", 400);
//判断异常的类型,返回不一样的返回值
if(ex instanceof MissingServletRequestParameterException){
map.put("msg","缺少必需参数:"+((MissingServletRequestParameterException) ex).getParameterName());
}
else if(ex instanceof MyException){
map.put("msg","这是自定义异常");
}
return map;
}
}
//自定义异常类
@Data
public class MyException extends RuntimeException {
private long code;
private String msg; public MyException(Long code, String msg){
super(msg);
this.code = code;
this.msg = msg;
} public MyException(String msg){
super(msg);
this.msg = msg;
}
}
@RestController
public class TestController {
@RequestMapping("testException")
public String testException() throws Exception{
throw new MissingServletRequestParameterException("name","String");
} @RequestMapping("testMyException")
public String testMyException() throws MyException{
throw new MyException("i am a myException");
}
}

分别访问testExceptiontestMyException接口,可得到以下结果

{"msg":"缺少必需参数:name","code":400}
{"msg":"这是自定义异常","code":400}

如果不需要返回json数据,而要渲染某个页面模板返回给浏览器,那么可以这么实现:

@ExceptionHandler(value = MyException.class)
public ModelAndView myErrorHandler(MyException ex) {
ModelAndView modelAndView = new ModelAndView();
//指定错误页面的模板页
modelAndView.setViewName("error");
modelAndView.addObject("code", ex.getCode());
modelAndView.addObject("msg", ex.getMsg());
return modelAndView;
}

这样子很方便吧~

如果觉得不错,分享给你的朋友!

THANDKS

  • End -

一个立志成大腿而每天努力奋斗的年轻人

伴学习伴成长,成长之路你并不孤单!

最新文章

  1. 浅谈Slick(4)- Slick301:我的Slick开发项目设置
  2. BOOST.Asio——扫盲
  3. java 22 - 16 多线程之生产者和消费者的问题
  4. 咏南CS插件开发框架也可BS方式部署
  5. map与vector---Email Aliases
  6. C++ and Java template class and function 模板类和模板函数
  7. dubbo监控活跃线程数
  8. Cubieboard编译安装NodeJS经验总结
  9. 自己动手开发编译器(四)利用DFA转换表建立扫描器
  10. 如何合并相同数据并转置(mysql)实现
  11. C# .NET Socket 简单实用框架
  12. BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]
  13. Merge K Sorted List(含Merge Two Sorted LIst) leetcode java
  14. UVALive 4426 Blast the Enemy! 计算几何求重心
  15. validate表单校验插件笔记
  16. 各种常用的JSON接口
  17. Java设计模式(23)——行为模式之访问者模式(Visitor)
  18. mysql 5.7版本如何修改密码
  19. Windows Server 2003 R2 With Sp2 序列号
  20. HDU 5496——Beauty of Sequence——————【考虑局部】

热门文章

  1. JAVA JVM记录
  2. 基于Springboot+Junit+Mockito做单元测试
  3. jquery自己写的带左右箭头自动播放幻灯插件,简化
  4. Linux 内核存取 I/O 和内存空间
  5. Team Foundation Server 2015使用教程【7】:权限为读取器的团队成员连接tfs及checkin操作
  6. 关于java继承的哪些事
  7. 洛谷$P$3241 开店 $[HNOI2015]$ 主席树/点分治
  8. [gitHub实践] 实践记录
  9. Linux下安装oracle提示INS-20802 Oracle Net Configuration Assistant
  10. 量化投资学习笔记07——python知识补漏