最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot統(tǒng)一數(shù)據(jù)返回的方法實(shí)現(xiàn)

 更新時間:2024年10月13日 08:30:18   作者:從零開始的-CodeNinja之路  
在前后端交互過程中,為了便于數(shù)據(jù)處理,后端數(shù)據(jù)需要進(jìn)行統(tǒng)一封裝返回給前端,這種做法不僅方便前后端溝通,降低了溝通成本,還有助于項(xiàng)目的統(tǒng)一維護(hù)和后端技術(shù)部門的規(guī)范制定,本文就來介紹一下

一. 概念

其實(shí)統(tǒng)一數(shù)據(jù)返回是運(yùn)用了AOP(對某一類事情的集中處理)的思維,簡單概括就是在我們進(jìn)行前后端數(shù)據(jù)交互的時候,能夠讓后端的數(shù)據(jù)進(jìn)行統(tǒng)一的打包封裝,返回給前端,便于前后端的數(shù)據(jù)處理。

二.實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)返回

其實(shí)統(tǒng)一數(shù)據(jù)返回非常簡單,在實(shí)現(xiàn)時要加入類注解@ControllerAdvice(這是一個表示控制通知的注解,在接下來的統(tǒng)一異常處理也要運(yùn)用到),在添加類注解后還要在實(shí)現(xiàn)ResponseBodyAdvice接口,然后重寫接口的responseAdvice接口和beforeBodyWriter方法即可實(shí)現(xiàn)。

  • 添加類注解@ControllerAdvice,實(shí)現(xiàn)接口ResponseBodyAdvice
  • 重寫responseAdvice方法
  • 重寫beforeBodyWriter方法
  • 特殊數(shù)據(jù)類型特殊處理(String)

2.1 重寫responseAdvice方法

responseAdvice方法如下:

在這里插入圖片描述

@Override
public boolean supports(MethodParameter returnType, Class converterType) {
	return true;
}

可以看到,重寫該方法主要返回的是Boolean數(shù)據(jù)類型,返回false表示不執(zhí)行統(tǒng)一返回,返回true表示對于所有的數(shù)據(jù)類型都進(jìn)行數(shù)據(jù)統(tǒng)一返回。

supports方法:判斷是否要執(zhí)行beforeBodyWrite方法.true為執(zhí)行,false不執(zhí)行.通過該方法可以
選擇哪些類或哪些方法的response要進(jìn)行處理,其他的不進(jìn)行處理

2.2 重寫beforeBodyWriter方法

beforeBodyWriter方法如下:

在這里插入圖片描述

beforeBodyWrite方法:對response方法進(jìn)行具體操作處理

其中的參數(shù)body最為重要,如果想要對統(tǒng)一后的數(shù)據(jù)進(jìn)行格式的轉(zhuǎn)換,直接轉(zhuǎn)換body的格式就行,因?yàn)檫@里的body代指了所有的數(shù)據(jù)格式。

三. 特殊類型-String的處理

在經(jīng)過多次不同的數(shù)據(jù)類型測試后發(fā)現(xiàn),其它類型就可以順利返回,而String類型卻返回不正確。

對于String的數(shù)據(jù)類型如果想要返回,我們要先引入ObjectMapper,通過調(diào)用ObjeceMapper的writeValueAsString()方法來把body的數(shù)據(jù)格式給轉(zhuǎn)換成Json格式,然后再次進(jìn)行統(tǒng)一返回即可。

進(jìn)行數(shù)據(jù)轉(zhuǎn)換的代碼如下:

private static ObjectMapper mapper = new ObjectMapper();

@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType,
 ServerHttpRequestrequest, ServerHttpResponse response) {
 
	//如果返回結(jié)果為String類型, 使?SpringBoot內(nèi)置提供的Jackson來實(shí)現(xiàn)信息的序列化
	if (body instanceof String){
		return mapper.writeValueAsString(Result.success(body));
	}
	
}

四. 全部代碼

import com.example.demo.model.Result;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
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;

@Slf4j
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {
	
	private static ObjectMapper mapper = new ObjectMapper();
		
	@Override
	public boolean supports(MethodParameter returnType, Class converterType) {
		return true;
	}
	
	@SneakyThrows
	@Override
	public Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest
	request, ServerHttpResponse response) {
	
		//返回結(jié)果更加靈活
		if (body instanceof Result){
			return body;
		}
		
		//如果返回結(jié)果為String類型, 使?SpringBoot內(nèi)置提供的Jackson來實(shí)現(xiàn)信息的序列化
		if (body instanceof String){
			return mapper.writeValueAsString(Result.success(body));
		}
		
		return Result.success(body);
	}
}
  • 方便前端程序員更好的接收和解析后端數(shù)據(jù)接口返回的數(shù)據(jù)
  • 降低前端程序員和后端程序員的溝通成本,按照某個格式實(shí)現(xiàn)就可以了,因?yàn)樗薪涌诙际沁@樣返回
    的.
  • 有利于項(xiàng)目統(tǒng)?數(shù)據(jù)的維護(hù)和修改.
  • 有利于后端技術(shù)部門的統(tǒng)?規(guī)范的標(biāo)準(zhǔn)制定,不會出現(xiàn)稀奇古怪的返回內(nèi)容.

到此這篇關(guān)于SpringBoot統(tǒng)一數(shù)據(jù)返回的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot統(tǒng)一數(shù)據(jù)返回內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 8新時間日期庫java.time的使用示例

    Java 8新時間日期庫java.time的使用示例

    這篇文章主要給你大家介紹了關(guān)于Java 8新時間日期庫java.time的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot常用注解@RestControllerAdvice詳解

    SpringBoot常用注解@RestControllerAdvice詳解

    這篇文章主要介紹了SpringBoot常用注解@RestControllerAdvice詳解,@RestControllerAdvice是一個組合注解,由@ControllerAdvice、@ResponseBody組成,而@ControllerAdvice繼承了@Component,因此@RestControllerAdvice本質(zhì)上是個Component,需要的朋友可以參考下
    2024-01-01
  • mybatis中<choose>標(biāo)簽的用法說明

    mybatis中<choose>標(biāo)簽的用法說明

    這篇文章主要介紹了mybatis中<choose>標(biāo)簽的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java類與對象案例之打字游戲

    java類與對象案例之打字游戲

    這篇文章主要為大家詳細(xì)介紹了java類與對象案例之打字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(57)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(57)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • Java判斷絕對值的方法總結(jié)

    Java判斷絕對值的方法總結(jié)

    在本文中作者為大家分享了兩種Java判斷絕對值的方法,對此有興趣的朋友可以和小編一起學(xué)習(xí)下。
    2018-02-02
  • 百度Java面試題 前200頁精選(上)

    百度Java面試題 前200頁精選(上)

    這篇文章主要為大家分享了Java面試資源,百度“Java面試題”前200頁都在這里了,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 5分鐘教你使用java搞定網(wǎng)站登錄驗(yàn)證碼

    5分鐘教你使用java搞定網(wǎng)站登錄驗(yàn)證碼

    這篇文章主要為大家介紹了使用java搞定網(wǎng)站登錄驗(yàn)證碼的快速實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Java設(shè)計(jì)模式中的工廠模式詳解

    Java設(shè)計(jì)模式中的工廠模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式中的工廠模式詳解,工廠方法模式(Factory?Method?Pattern):創(chuàng)新型模式之一,簡稱工廠模式,通過定義工廠父類負(fù)責(zé)定義創(chuàng)建對象的公共接口,而子類則負(fù)責(zé)生成具體的對象,需要的朋友可以參考下
    2023-09-09
  • 如何使用?Spring?Boot?搭建?WebSocket?服務(wù)器實(shí)現(xiàn)多客戶端連接

    如何使用?Spring?Boot?搭建?WebSocket?服務(wù)器實(shí)現(xiàn)多客戶端連接

    本文介紹如何使用SpringBoot快速搭建WebSocket服務(wù)器,實(shí)現(xiàn)多客戶端連接和消息廣播,WebSocket協(xié)議提供全雙工通信,SpringBoot通過@ServerEndpoint簡化配置,支持實(shí)時消息推送,適用于聊天室或通知系統(tǒng)等應(yīng)用場景
    2024-11-11

最新評論

香港| 通化市| 黄浦区| 鹤山市| 安陆市| 尉氏县| 会泽县| 灵宝市| 浮山县| 安溪县| 华安县| 湖南省| 康平县| 永新县| 芜湖县| 册亨县| 镶黄旗| 靖州| 福州市| 始兴县| 西乡县| 宜兰县| 连江县| 广平县| 青岛市| 泽州县| 区。| 翁牛特旗| 济南市| 通河县| 余庆县| 奉贤区| 阳朔县| 谢通门县| 松原市| 泾川县| 磐安县| 乌兰县| 邵东县| 芒康县| 吉林市|