Spring Boot统一功能处理

1. 统一数据返回格式

统一数据返回格式,就是对返回的数据做一个统一的处理:

java 复制代码
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {
    @Autowired
    ObjectMapper mapper;
    //判断是否要执行beforeBodyWrite方法
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {

        return true;
    }

    @SneakyThrows
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        if(body instanceof Result) {
            return body;
        }

        if(body instanceof String) {
            return mapper.writeValueAsString(Result.success(body));
        }
        return Result.success(body);
    }
}

创建一个类实现RespinseBodyAdvice接口

@ControllerAdvice 表示控制器通知类

supports方法用于判断当前的响应是否要做处理,true表示需要,则会执行beforeBodyWrite方法来处理,false则不会执行。

注意:如果返回的结果是String类型的话,需要把处理后的body转为String类型,否则会报错。

2. 统一异常处理

如果发生异常时,我们不希望把它展示给用户可以使用统一异常处理,自定义发生异常时展示的内容:

java 复制代码
@Slf4j
@ControllerAdvice
@ResponseBody
public class ExceptionAdvice {
    @ExceptionHandler
    public Result HandleException(Exception e) {
        log.error("发生异常:", e);
        return Result.fail("内部错误");
    }
}

这里可以写多个HandleException方法来处理不同的异常,处理异常时会按照异常的深度顺序对应来处理。

注意:添加了统一异常处理后,发生的异常都会被处理掉,也就不会出现异常信息,需要我们自己用日志打印。

相关推荐
猪猪拆迁队13 小时前
虚拟工厂仿真引擎的架构设计:让一条产线可编程、可观测、可干预
后端·ai编程
字节跳动数据库13 小时前
文章分享——相似函数处理方法
人工智能·后端·程序员
云技纵横13 小时前
@Transactional 失效的 7 种场景:第 5 种最难排查
后端
用户67570498850213 小时前
你知道 Go 结构体和结构体指针调用的区别吗?一文带你彻底搞懂!
后端·go
程序员cxuan14 小时前
读懂 Claude Code 架构分析系列,第一篇,开始!
人工智能·后端·架构
用户67570498850214 小时前
面试官问“装饰器模式”,这样回答薪资多要 3000!
后端
tntxia14 小时前
Geo Scene域名修改引起的一些问题
后端
用户2986985301414 小时前
Java 实现 Word 文档加密与权限解除
java·后端
vanuan14 小时前
给你的A2A-Agent加把锁-认证鉴权实战指南
后端
Yeats_Liao14 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构