目录统一数据返回一. 概念二.实现统一数据返回2.1 重写responseAdvice方法2.2 重写beforeBodyWriter方法三. 特殊类型-String的处理四. 全部代码统一数据返回一. 概念其实统一数据返回是运用了AOP对某一类事情的集中处理的思维简单概括就是在我们进行前后端数据交互的时候能够让后端的数据进行统一的打包封装返回给前端便于前后端的数据处理。二.实现统一数据返回其实统一数据返回非常简单在实现时要加入类注解ControllerAdvice(这是一个表示控制通知的注解在接下来的统一异常处理也要运用到)在添加类注解后还要在实现ResponseBodyAdvice接口然后重写接口的responseAdvice接口和beforeBodyWriter方法即可实现。添加类注解ControllerAdvice实现接口ResponseBodyAdvice重写responseAdvice方法重写beforeBodyWriter方法特殊数据类型特殊处理String2.1 重写responseAdvice方法responseAdvice方法如下Override public boolean supports(MethodParameter returnType, Class converterType) { return true; }可以看到重写该方法主要返回的是Boolean数据类型返回false表示不执行统一返回返回true表示对于所有的数据类型都进行数据统一返回。supports方法:判断是否要执行beforeBodyWrite方法.true为执行,false不执行.通过该方法可以选择哪些类或哪些方法的response要进行处理,其他的不进行处理2.2 重写beforeBodyWriter方法beforeBodyWriter方法如下beforeBodyWrite方法:对response方法进行具体操作处理其中的参数body最为重要如果想要对统一后的数据进行格式的转换直接转换body的格式就行因为这里的body代指了所有的数据格式。三. 特殊类型-String的处理在经过多次不同的数据类型测试后发现其它类型就可以顺利返回而String类型却返回不正确。对于String的数据类型如果想要返回我们要先引入ObjectMapper通过调用ObjeceMapper的writeValueAsString()方法来把body的数据格式给转换成Json格式然后再次进行统一返回即可。进行数据转换的代码如下private static ObjectMapper mapper new ObjectMapper(); Override public Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType, ServerHttpRequestrequest, ServerHttpResponse response) { //如果返回结果为String类型, 使?SpringBoot内置提供的Jackson来实现信息的序列化 if (body instanceof String){ return mapper.writeValueAsString(Result.success(body)); } }四. 全部代码import com.example.demo.model.Result; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; Slf4j ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice { private static ObjectMapper mapper new ObjectMapper(); 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; } //如果返回结果为String类型, 使?SpringBoot内置提供的Jackson来实现信息的序列化 if (body instanceof String){ return mapper.writeValueAsString(Result.success(body)); } return Result.success(body); } }方便前端程序员更好的接收和解析后端数据接口返回的数据降低前端程序员和后端程序员的沟通成本,按照某个格式实现就可以了,因为所有接口都是这样返回的.有利于项目统数据的维护和修改.有利于后端技术部门的统规范的标准制定,不会出现稀奇古怪的返回内容.