####全局处理json数据返回格式
在前后端分离中 前后端为了更好的交互 应该指定一个较为通用的数据返回格式
基本上都是code+data 方式返回
在spring mvc 中通过对controller全局增强 来进行处理
1:制定 返回json数据返回大致格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| /** * 返回json 字符串格式 * json接口 返回的字符串格式 * * @author ming * @date 2017-11-10 12:56 */ @Data @NoArgsConstructor public class ReturnJsonBody implements Serializable { /** * 状态码 */ private long code; /** * 数据 */ private Object data; /** * 附加信息 */ private String msg; /** * 异常信息 */ private String stack;
/** * 返回成功的消息使用的构造函数 * * @author ming * @date 2017-11-10 17:26 */ public ReturnJsonBody(long code, Object data) { this.code = code; this.data = data; }
/** * 返回异常的消息使用的构造函数 * * @author ming * @date 2017-11-10 17:26 */ public ReturnJsonBody(long code, String msg, String stack) { this.code = code; this.msg = msg; this.stack = stack; } }
|
2:通过增强控制器来实现对返回数据包装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| /** * 全局json 数据返回处理 * * @author ming * @date 2017-11-10 14:02 */ @ControllerAdvice public class BaseGlobalResponseBodyAdvice implements ResponseBodyAdvice<Object> {
/** * 需要处理的类型 * * @author ming * @date 2017-11-10 14:05 */ private final Set<MediaType> jsonMediaType = new ImmutableSet.Builder<MediaType>() .add(MediaType.APPLICATION_JSON) .add(MediaType.APPLICATION_JSON_UTF8) .build();
@Override public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> converterType) { return true; }
@Override public Object beforeBodyWrite( Object obj, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> converterType, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { //当类型 不属于 需要处理的包头的时候 直接返回obj if (!jsonMediaType.contains(mediaType)) { return obj; } //当类型 是属于需要处理的时候 并且 obj不是ReturnJsonBody的时候 进行格式化处理 if (obj == null || !(obj instanceof ReturnJsonBody)) { obj = new ReturnJsonBody(0L, obj); } return obj; }
}
|
####总结: 使用增强控制器返回格式方式 来对json接口进行返回数据格式统一处理 也是必须的 方便和前端交互