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

Spring?Boot如何實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)返回

 更新時間:2024年07月06日 15:31:25   作者:從零開始的-CodeNinja之路  
這篇文章主要介紹了Spring?Boot如何實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)返回,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

統(tǒng)一數(shù)據(jù)返回

一. 概念

其實(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)文章

  • Spring中ResponseBodyAdvice的使用詳解

    Spring中ResponseBodyAdvice的使用詳解

    這篇文章主要介紹了Spring中ResponseBodyAdvice的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • springboot讀取自定義配置文件實(shí)現(xiàn)過程

    springboot讀取自定義配置文件實(shí)現(xiàn)過程

    本文介紹Spring Boot中配置文件讀取方法,包括使用@Value注解讀取application.properties和自定義properties文件,以及通過ResourceBundle編寫工具類ResourceUtil實(shí)現(xiàn)配置獲取
    2025-08-08
  • java編程之xpath介紹

    java編程之xpath介紹

    這篇文章主要介紹了java編程之xpath介紹,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Gateway如何實(shí)現(xiàn)全局跨域

    Gateway如何實(shí)現(xiàn)全局跨域

    這篇文章主要介紹了Gateway如何實(shí)現(xiàn)全局跨域問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java使用正則提取字符串中的內(nèi)容的詳細(xì)步驟

    Java使用正則提取字符串中的內(nèi)容的詳細(xì)步驟

    這篇文章主要介紹了Java中使用正則表達(dá)式提取字符串內(nèi)容的方法,通過Pattern和Matcher類實(shí)現(xiàn),涵蓋編譯正則、查找匹配、分組捕獲、數(shù)字與郵箱提取場景,以及命名分組、非貪婪匹配等技巧,需要的朋友可以參考下
    2025-08-08
  • Java使用JaCoCo進(jìn)行代碼覆蓋率分析的操作指南

    Java使用JaCoCo進(jìn)行代碼覆蓋率分析的操作指南

    JaCoCo是一個開源的 Java 代碼覆蓋率工具,廣泛應(yīng)用于測試過程中,它可以幫助開發(fā)者分析測試代碼的覆蓋情況,在本文中,我們將介紹 JaCoCo 的基本功能、如何集成到 Maven 項(xiàng)目中,以及通過具體案例展示如何生成覆蓋率報告,需要的朋友可以參考下
    2025-02-02
  • Java jvm中Code Cache案例詳解

    Java jvm中Code Cache案例詳解

    這篇文章主要介紹了Java jvm中Code Cache案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot項(xiàng)目如何打包部署到服務(wù)器

    SpringBoot項(xiàng)目如何打包部署到服務(wù)器

    這篇文章主要介紹了SpringBoot項(xiàng)目如何打包部署到服務(wù)器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringMVC和Spring的配置文件掃描包詳解

    SpringMVC和Spring的配置文件掃描包詳解

    這篇文章主要介紹了SpringMVC和Spring的配置文件掃描包,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • Java while和do...while循環(huán)的使用方式

    Java while和do...while循環(huán)的使用方式

    文章對比Java while與do-while循環(huán)的核心機(jī)制、語法差異、適用場景及錯誤防范,強(qiáng)調(diào)do-while至少執(zhí)行一次的特點(diǎn),指出語法規(guī)范(如結(jié)尾分號)和性能優(yōu)化要點(diǎn),并提及Java17模式匹配對循環(huán)的擴(kuò)展支持
    2025-07-07

最新評論

永寿县| 如皋市| 揭阳市| 宜城市| 延边| 永嘉县| 定边县| 阳城县| 普兰店市| 石阡县| 葵青区| 榆社县| 盐津县| 乌兰县| 周口市| 常山县| 蒙自县| 峨边| 繁峙县| 陆河县| 武平县| 寿阳县| 宁武县| 会宁县| 普陀区| 宝坻区| 平泉县| 连云港市| 天镇县| 卢氏县| 丰镇市| 海原县| 若尔盖县| 扎兰屯市| 龙川县| 黔东| 高陵县| 淮南市| 新民市| 苗栗市| 赣州市|