日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

springboot控制接口返回的字段_SpringBoot实战:SpringBoot之Rest Full接口自定义返回数据类型(ResponseBodyAdvice)...

發布時間:2023/12/15 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。