@ControllerAdvice实现优雅地处理异常
异常 实现 处理 优雅
2023-09-14 09:06:17 时间
@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");
}
}
分别访问testException
和testMyException
接口,可得到以下结果
{"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;
}
这样子很方便吧~
相关文章
- SpringMVC 实现文件上传与下载,并配置异常页面
- 【异常】The dependencies of some of the beans in the application context form a cycle
- [ssh ][异常]The type org.springframework.dao.support.DaoSupport cannot be resolved........
- Linux的中断和异常扫盲笔记
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
- Atitit 语言的异常机制 目录 1. 异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法,1 2. 三种模式1 2.1. 终止模式
- atitit.面向过程的编程语言异常处理 c语言 asp vbs 的try catch 实现
- atitit.面向过程的编程语言异常处理 c语言 asp vbs 的try catch 实现
- ML:通过数据预处理(分布图/箱型图/模型寻找异常值/热图/散点图/回归关系/修正分布正态化/QQ分位图/构造交叉特征/平均数编码)利用十种算法模型调优实现工业蒸汽量回归预测(交叉训练/模型融合)之详
- 【异常】Jenkins构建提示Could not read from remote repository.
- 【SpringBoot3】SpringBoot中实现全局统一异常处理
- 用于回归问题的异常鲁棒极限学习机(ORELM)(Matlab代码实现)
- 【状态估计】观测信号(包括异常值)的状态估计方法(Matlab代码实现)
- 事务场景中,手动捕获异常时记得显式回滚事务
- 【华为机试真题详解 Python实现】异常的打卡记录【2023 Q1】
- mac os 安装PIP 及异常“”Can't install python module: PyCharm Error: “byte-compiling is disabled, skipping”“”的解决方案
- 统一异常处理@ControllerAdvice
- 如何利用AI识别未知——加入未知类(不太靠谱),检测待识别数据和已知样本数据的匹配程度(例如使用CNN降维,再用knn类似距离来实现),将问题转化为特征搜索问题而非决策问题,使用HTM算法(记忆+模式匹配预测就是智能),GAN异常检测,RBF
- Spring Cloud Zuul过滤器介绍及使用(传递数据、拦截请求和异常处理)
- 【异常】客户端发起HTTPS请求报错,服务端返回400 Bad Request ,并且提示No required SSL certificate was sent