拿去用,接口统一返回值,最简单的一种实现 | 您所在的位置:网站首页 › java返回值怎么用 › 拿去用,接口统一返回值,最简单的一种实现 |
文末可以领取《尚硅谷Java学科全套教程(总207.77GB)》。 大家好,我是路人,这是 SpringMVC 系列第 19 篇。 目录1、前言 2、接口如何实现统一返回值? 3、案例:通过 RequestBodyAdvice 实现统一返回值 3.1、git 代码位置 3.2、定义返回值的通用类型 3.3、自定义一个 ResponseBodyAdvice 3.4、来个 controller 测试效果 3.5、验证接口输出 4、多个 ResponseBodyAdvice 指定顺序 5、@ControllerAdvice 指定增强的范围 6、ResponseBodyAdvice 原理 7、留个问题 8、SpringMVC 系列目录 9、更多好文章 10、尚硅谷Java学科全套教程(总207.77GB) 1、前言上一篇中介绍了 RequestBodyAdvice 接口,可以对@RequestBody 进行增强,本文介绍另外一个相似的接口:ResponseBodyAdvice,这个可以对@ResponseBody 进行增强,可以拦截@ResponseBody 标注的方法的返回值,对返回值进行统一处理,比如进行加密、包装等操作;比如通过他可以实现统一的返回值。 2、接口如何实现统一返回值?要求系统中所有返回 json 格式数据的接口都需要返回下面格式的数据。 { "success": true, "code": null, "msg": "操作成功!", "data": 具体的数据 }但是咱们系统中所有的接口返回值都是下面这种格式的,难道咱们要一个个去手动改一下接口的返回值么? SpringMVC 为我们提供了更简单的方法,此时我们可以使用 RequestBodyAdvice 来实现,拦截所有@ResponseBody 接口,将接口的返回值包装一下,包装为统一的格式返回,下面来看具体代码如何实现。 3、案例:通过 RequestBodyAdvice 实现统一返回值 3.1、git 代码位置 https://gitee.com/javacode2018/springmvc-series 3.2、定义返回值的通用类型 package com.javacode2018.springmvc.chat14.dto; /** * rest接口通用返回值数据结构 * * @param */ public class ResultDto { //接口状态(成功还是失败) private Boolean success; //错误码 private String code; //提示信息 private String msg; //数据 private T data; public Boolean getSuccess() { return success; } public void setSuccess(Boolean success) { this.success = success; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } public static ResultDto success(T data) { return success(data, "操作成功!"); } public static ResultDto success(T data, String msg) { ResultDto result = new ResultDto(); result.setSuccess(Boolean.TRUE); result.setMsg(msg); result.setData(data); return result; } public static ResultDto error(String msg) { return error(null, msg); } public static ResultDto error(String code, String msg) { return error(code, msg, null); } public static ResultDto error(String code, String msg, T data) { ResultDto result = new ResultDto(); result.setSuccess(Boolean.FALSE); result.setCode(code); result.setMsg(msg); result.setData(data); return result; } } 3.3、自定义一个 ResponseBodyAdvice package com.javacode2018.springmvc.chat14.config; import com.javacode2018.springmvc.chat14.dto.ResultDto; import org.springframework.core.MethodParameter; import org.springframework.core.io.Resource; 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.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import java.util.HashSet; import java.util.Set; @ControllerAdvice public class ResultDtoResponseBodyAdvice implements ResponseBodyAdvice { //不支持的类型列表 private static final Set[] basePackageClasses() default {}; /** * 用来指定Controller需要满足的类型,满足assignableTypes中指定的任意一个就可以 */ Class[] assignableTypes() default {}; /** * 用来指定Controller上需要有的注解,满足annotations中指定的任意一个就可以 */ Class |
CopyRight 2018-2019 实验室设备网 版权所有 |