您现在的位置是:首页 > 编程 > 

【SpringBoot实用技巧】全局异常处理及返回增强

2025-07-27 15:16:57
【SpringBoot实用技巧】全局异常处理及返回增强 一、从ControllerAdvice开始ControllerAdvice是 SpringBoot 框架中的一个注解,它用于定义全局的Controller增强类,而RestControllerAdvice就是对于RestController的增强类。它是 AOP(面向切面编程)的实践,目的是将横切关注点(如异常处理、数据绑定、模型转换等)从各

【SpringBoot实用技巧】全局异常处理及返回增强

一、从ControllerAdvice开始

ControllerAdvice是 SpringBoot 框架中的一个注解,它用于定义全局的Controller增强类,而RestControllerAdvice就是对于RestController的增强类。它是 AOP(面向切面编程)的实践,目的是将横切关注点(如异常处理、数据绑定、模型转换等)从各个控制器中分离出来,集中进行处理。它通常和ExceptionHandler结合起来一起使用。

二、全局异常处理代码语言:java复制
@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方法返回结果。

三、返回增强代码语言:java复制
@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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1190086.html

相关标签:无
上传时间: 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分钟前 发表
集中进行处理