【SpringBoot实用技巧】全局异常处理及返回增强
【SpringBoot实用技巧】全局异常处理及返回增强
一、从ControllerAdvice开始ControllerAdvice是 SpringBoot 框架中的一个注解,它用于定义全局的Controller增强类,而RestControllerAdvice就是对于RestController的增强类。它是 AOP(面向切面编程)的实践,目的是将横切关注点(如异常处理、数据绑定、模型转换等)从各
【SpringBoot实用技巧】全局异常处理及返回增强
ControllerAdvice是 SpringBoot 框架中的一个注解,它用于定义全局的Controller增强类,而RestControllerAdvice就是对于RestController的增强类。它是 AOP(面向切面编程)的实践,目的是将横切关注点(如异常处理、数据绑定、模型转换等)从各个控制器中分离出来,集中进行处理。它通常和ExceptionHandler结合起来一起使用。
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {})
public Result<Object> apiExceptionHandler(ApiException e) {
return (e.getCode(), e.getMessage());
}
@ExceptionHandler(value = {})
public Result<Object> runtimeExceptionHandler(RuntimeException e) {
return (e.getMessage());
}
}
这段代码定义了一个全局的RestController增强,它主要用于异常处理。ExceptionHandler注解表示当捕捉到指定value的异常类时,执行函数体。在本段代码中,首先匹配了ApiException异常类,如果匹配成功,则执行apiExceptionHandler方法,来返回结果;否则则会匹配到RuntimeException异常类,执行runtimeExceptionHandler方法返回结果。
@ControllerAdvice
public class WebRespeBodyAdvice<T> implements RespeBodyAdvice<T> {
@Override
public boolean supports(MethodParameter methodParameter, Class aClass) {
if (methodParameter.getMethod() != null) {
Annotation[] annotati = methodParameter.getMethod().getDeclaringClass().getAnnotati();
for (Annotation annotation : annotati) {
if (annotation instanceof RestController) {
return true;
}
}
}
return false;
}
@Override
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass,
ServerHttpRequest serverHttpRequest, ServerHttpRespe serverHttpRespe) {
if (o instanceof Result)
return o;
if (o instanceof String) {
return ((o));
}
return (o);
}
}
这段代码顶一个一个返回增强,其中support方法定义了什么条件才能进行增强,beforeBodyWrite方法定义了如何进行增强。在supports方法中,通过获取注解的函数来获取是否被RestController注解,如果是则进行增强;在beforeBodyWrite则是匹配原函数的返回结果,如果是Result对象则直接返回,否则将它构造成Result对象进行返回,需要注意的是,如果原来的返回对象是String,则需要单独处理成Result对象的Json String返回。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-22 19:44:04
推荐阅读
留言与评论(共有 9 条评论) |
本站网友 房地产女老板 | 23分钟前 发表 |
如果是Result对象则直接返回 | |
本站网友 宁波海关 | 19分钟前 发表 |
目的是将横切关注点(如异常处理 | |
本站网友 精算师待遇 | 16分钟前 发表 |
全局异常处理代码语言:java复制@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = {}) public Result<Object> apiExceptionHandler(ApiException e) { return (e.getCode() | |
本站网友 灯心草的功效与作用 | 0秒前 发表 |
它是 AOP(面向切面编程)的实践 | |
本站网友 怎样控制自己的情绪 | 11分钟前 发表 |
在本段代码中 | |
本站网友 咸宁学院官网 | 20分钟前 发表 |
MethodParameter methodParameter | |
本站网友 326ppi | 19分钟前 发表 |
在supports方法中 | |
本站网友 童稚携壶浆 | 6分钟前 发表 |
集中进行处理 |