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方法来处理不同的异常,处理异常时会按照异常的深度顺序对应来处理。

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

相关推荐
唐青枫几秒前
Java Liquibase 实战指南:让数据库变更像代码一样可追踪
java
qq_422152574 分钟前
PDF 解密工具怎么选?2026 年文档密码移除方案与注意事项
java·前端·pdf
布朗克16814 分钟前
38 Spring Boot入门——自动配置、核心注解与Starter机制
java·spring boot·后端
程序员老申18 分钟前
外呼突然全挂了,追查 24 分钟后我发现了 etcd 最阴的一颗雷
后端·程序员
何以解忧,唯有..19 分钟前
Go语言变量的声明方式详解
开发语言·后端·golang
长栎20 分钟前
MyBatis 缓存为啥总是失效?装饰器模式套娃的代价
后端
bright_ye21 分钟前
setjmp & longjmp 深度详解 + 代码示例
后端
To_OC21 分钟前
我一直以为 Ajax 是个黑盒,直到我写了这 50 行代码
前端·后端·全栈
沪漂阿龙22 分钟前
LangChain 系列:Structured Output结构化输出与源码解析
java·人工智能·架构·langchain
她的男孩23 分钟前
AI 自动化编写 SQL 脚本,更要守住 Flyway 版本管理的防线
人工智能·后端