码迷,mamicode.com
首页 > 其他好文 > 详细

接口返回值response统一标准格式

时间:2020-03-30 19:30:14      阅读:390      评论:0      收藏:0      [点我收藏+]

标签:converter   ace   override   serve   false   imp   特殊功能   统一   desc   

一、为什么要对springboot的接口返回值统一标准格式

  springboot默认情况下的response格式:String、Object、void、异常,以上几种情况,如果和客户端开发人员联调接口,他们会很懵逼,因为你给他们的接口没有一个统一的格式,客户端开发人员,不知道如何处理返回值,所以要统一response的标准格式。

二、定义response的标准格式

  一般的response的标准格式包含三部分:1.status状态值:代表本次请求response的状态结果;2.response描述:代表本次请求response的状态结果;3.data数据:本次返回的数据。

{
    "status":0,
    "desc":"成功",
    "data":"test"
}

三、response代码封装

1.采用ResponseBodyAdvice技术来实现response的统一格式,ResponseBodyAdvice的作用:拦截Controller方法的返回值,统一处理返回值/响应体,一般用来做response的统一格式、加解密、签名等等。ResponseBodyAdvice接口源码:

public interface ResponseBodyAdvice<T> {
    boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType);

/*主要有两个方法   boolean supports判断是否支持, beforeBodyWrite在写入参数列表之前要做的操作

*/
    T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType,
            Class<? extends HttpMessageConverter<?>> selectedConverterType,
            ServerHttpRequest request, ServerHttpResponse response);

}

2.写一个ResponseBodyAdvice实现类

@ControllerAdvice
public class ResponseHandler implements ResponseBodyAdvice<String> {

/**
* 是否支持advice功能

*true=支持,false=不支持
*/
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {

return true;
}

@Override
public Objcet beforeBodyWrite(Object o, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
  if(o instanceof ErrorResult){
    ErrorResult errorResult = (ErrorResult)o;
    return Result.fail(errorResult.getStatus(),errorResult.getMessage());
  }else if (o instanceof String){
    return JsonUtil.object2json(Result.suc(o));
  }
return Result.sec(o); } }

重点1.@ControllerAdvice注解:

  @ControllerAdvice这是一个非常有用的注解,它的作用是增强Controlle r的扩展功能类。主要体现在两方面:对Controller全局数据统一处理,对Controller全局异常统一处理。

  在使用@ControllerAdvice时,还要特别注意,加上basePackages,@ControllerAdvice ( basePackages = "com. guo. boot"),因为如果不加的话,它可是对整个系统的Controller做了扩展功能,它会对某些特殊功能产生冲突,例如不加的话,在使用swagger时会出现空白页异常。

重点2.beforeBodyWrite方法体的response类型判断

if (o instanceof String){
    return JsonUtil.object2json(Result.suc(o));
  }
以上代码一定要加,因为Controller的返回值为String的时候,它是直接返回String,而不是json。故要做下json转换处理。

接口返回值response统一标准格式

标签:converter   ace   override   serve   false   imp   特殊功能   统一   desc   

原文地址:https://www.cnblogs.com/97guoxiang/p/12600271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!