旅游网站的网页设计,建设部网站221号文件,仿微信主题wordpress,wordpress apply_filters我们在日常开发的过程中#xff0c;经常会要求统一返回数据格式。如要求统一访问格式为{success: 请求是否成功,message: 请求消息,data: 请求数据}那我们要如何实现呢#xff0c;接下来将演示接口自定义返回数据类型一般接口返回的数据…我们在日常开发的过程中经常会要求统一返回数据格式。如要求统一访问格式为{success: 请求是否成功,message: 请求消息,data: 请求数据}那我们要如何实现呢接下来将演示接口自定义返回数据类型一般接口返回的数据格式的都是json故现在pom.xml引入fastjson包com.alibabafastjson1.2.62先建一个符合统一数据格式的实体类import lombok.Getter;import lombok.Setter;import java.io.Serializable;/*** author wusy* Company: xxxxxx科技有限公司* Createtime : 2020/2/28 22:11* Description : rest full 统一返回包装类*/SetterGetterpublic class ResultObjectModel implements Serializable {/*** 返回是否成功*/private Boolean success;/*** 提示信息*/private String message;/*** 返回数据内容*/private T data;public ResultObjectModel() {}public ResultObjectModel(Boolean success, String message, T data) {this.success success;this.message message;this.data data;}/*** 返回成功* param data* param * return*/public static ResultObjectModel success(T data){return new ResultObjectModel(true , 请求成功 , data);}/*** 返回成功* param message* param data* param * return*/public static ResultObjectModel success(String message ,T data){return new ResultObjectModel(true , message , data);}/*** 失败* param message* return*/public static ResultObjectModel fail(String message){return new ResultObjectModel(true , message , null);}/*** 失败* param message* param data* param * return*/public static ResultObjectModel fail(String message ,T data){return new ResultObjectModel(false , message , data);}}然后修改Rest Full接口类import com.alibaba.fastjson.JSONObject;import com.wusy.demo.model.ResultObjectModel;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;/*** author wusy* Company: xxxxxx科技有限公司* Createtime : 2020/2/24 21:54* Description :*/RestControllerRequestMapping(/api/demo)public class HelloWorldController {RequestMapping(value /hello, method RequestMethod.GET)public ResultObjectModel hello() {JSONObject json new JSONObject();json.put(name, wusy);json.put(company , xxxxxx科技有限公司);return ResultObjectModel.success(json);}}运行应用打开浏览器在地址栏输入http://127.0.0.1:8787/api/demo/hello观察结果到这里我们实现了单个接口的数据统一返回但是一般一个应用的接口都非常多如果每一个接口都修改过去这显然是不合理的伟大的Spring怎么会没有考虑到这些呢SpringBoot提供了ResponseBodyAdvice供我们自定义返回数据格式。import com.wusy.demo.model.ResultObjectModel;import org.springframework.core.MethodParameter;import org.springframework.http.MediaType;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.http.server.ServerHttpRequest;import org.springframework.http.server.ServerHttpResponse;import org.springframework.web.bind.annotation.RestControllerAdvice;import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;/*** author wusy* Company: xxxxxx科技有限公司* Createtime : 2020/2/28 22:04* Description : rest full 全局统一返回封装*/RestControllerAdvicepublic class GlobalControllerAdvice implements ResponseBodyAdvice {/*** 判断哪些需要拦截* param returnType* param converterType* return*/Overridepublic boolean supports(MethodParameter returnType, Class extends HttpMessageConverter converterType) {return true;}Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class extends HttpMessageConverter selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {//如果返回的数据是ResultObjectModel、Byte、String类型则不进行封装if( body instanceof ResultObjectModel || body instanceof Byte || body instanceof String) {return body;}return this.getWrapperResponse(request , body);}/*** 返回正常的信息* param request* param data* return*/private ResultObjectModel getWrapperResponse(ServerHttpRequest request, Object data) {return new ResultObjectModel(true, 请求成功 , data);}}修改rest full接口类import com.alibaba.fastjson.JSONObject;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;/*** author wusy* Company: xxxxxx科技有限公司* Createtime : 2020/2/24 21:54* Description :*/RestControllerRequestMapping(/api/demo)public class HelloWorldController {RequestMapping(value /hello, method RequestMethod.GET)public JSONObject hello() {JSONObject json new JSONObject();json.put(name, wusy);json.put(company , xxxxxx科技有限公司);return json;}}运行应用打开浏览器在地址栏输入http://127.0.0.1:8787/api/demo/hello观察结果通过对比前后请求结果可知Rest Full接口自定义返回数据类型演示结束。