javascript
springboot控制接口返回的字段_SpringBoot实战:SpringBoot之Rest Full接口自定义返回数据类型(ResponseBodyAdvice)...
我們在日常開發的過程中,經常會要求統一返回數據格式。如要求統一訪問格式為
{
"success": 請求是否成功,
"message": 請求消息,
"data": 請求數據
}
那我們要如何實現呢,接下來將演示接口自定義返回數據類型
一般接口返回的數據格式的都是json,故現在pom.xml引入fastjson包
com.alibaba
fastjson
1.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 統一返回包裝類
*/
@Setter
@Getter
public 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 :
*/
@RestController
@RequestMapping("/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 全局統一返回封裝
*/
@RestControllerAdvice
public class GlobalControllerAdvice implements ResponseBodyAdvice {
/**
* 判斷哪些需要攔截
* @param returnType
* @param converterType
* @return
*/
@Override
public boolean supports(MethodParameter returnType, Class extends HttpMessageConverter>> converterType) {
return true;
}
@Override
public 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 :
*/
@RestController
@RequestMapping("/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接口自定義返回數據類型演示結束。
總結
以上是生活随笔為你收集整理的springboot控制接口返回的字段_SpringBoot实战:SpringBoot之Rest Full接口自定义返回数据类型(ResponseBodyAdvice)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魅族将三年建设1000+家体验店:有手机
- 下一篇: js与c语言效率_JavaScript控