国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring MVC】獲取 @RequsetBody 標(biāo)識(shí)的對(duì)象,使用適配器模式增加代碼可讀性

這篇具有很好參考價(jià)值的文章主要介紹了【Spring MVC】獲取 @RequsetBody 標(biāo)識(shí)的對(duì)象,使用適配器模式增加代碼可讀性。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 前言

一個(gè)技術(shù)需求引發(fā)的思考和實(shí)踐:

  • 思考
    • 用 AOP 把校驗(yàn)代碼
  • 實(shí)踐
    • 用 Spring MVC 的 RequestBodyAdvice 做AOP邏輯
    • 繼承 RequestBodyAdviceAdapter 實(shí)現(xiàn)自己的 適配器
    • 用自己的適配器讓代碼可讀性增加
    • 熟悉 Spring MVC 、Java 反射的一些實(shí)踐
  • 本文內(nèi)容
    • 澄清一個(gè)AOP校驗(yàn)JSON內(nèi)容的思路
    • 復(fù)習(xí)適配器模式

【Spring MVC】獲取 @RequsetBody 標(biāo)識(shí)的對(duì)象,使用適配器模式增加代碼可讀性
【Spring MVC】獲取 @RequsetBody 標(biāo)識(shí)的對(duì)象,使用適配器模式增加代碼可讀性

2. 怎么選擇切面?

  • 一個(gè)大致的切面
    【Spring MVC】獲取 @RequsetBody 標(biāo)識(shí)的對(duì)象,使用適配器模式增加代碼可讀性
  • 從 Spring 4.2 開始,有新的切面出現(xiàn),可以切到 RequestBody 上,這個(gè)切面更符合技術(shù)需求的粒度。
	public interface RequestBodyAdvice 

3. RequestBody 的切面的描述

  • RequestBodyAdvice
public interface RequestBodyAdvice {
	// 什么時(shí)候切
	boolean supports(MethodParameter methodParameter, Type targetType,
			Class<? extends HttpMessageConverter<?>> converterType);

	// 切到讀body前的位置
	HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter,
			Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException;

	// 切到讀body后的位置
	Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter,
			Type targetType, Class<? extends HttpMessageConverter<?>> converterType);
	
	// 處理空body
	@Nullable
	Object handleEmptyBody(@Nullable Object body, HttpInputMessage inputMessage, MethodParameter parameter,
			Type targetType, Class<? extends HttpMessageConverter<?>> converterType);
}

根據(jù)接口描述,直接實(shí)現(xiàn)這個(gè)接口需要讀很多參數(shù)的含義,其實(shí)實(shí)現(xiàn)業(yè)務(wù)需求僅需要:

  • 實(shí)現(xiàn)少部分方法
  • 了解少部分方法的參數(shù)

4. Spring 提供的 RequestBody 的適配器

  • RequestBodyAdviceAdapter

    該適配器簡(jiǎn)化了一個(gè)方法,并提供了必要的三個(gè)方法的實(shí)現(xiàn)

public abstract class RequestBodyAdviceAdapter implements RequestBodyAdvice {

	@Override
	public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter,
			Type targetType, Class<? extends HttpMessageConverter<?>> converterType)
			throws IOException {
		return inputMessage;
	}

	@Override
	public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter,
			Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
		return body;
	}

	@Override
	@Nullable
	public Object handleEmptyBody(@Nullable Object body, HttpInputMessage inputMessage,
			MethodParameter parameter, Type targetType,
			Class<? extends HttpMessageConverter<?>> converterType) {
		return body;
	}

}

根據(jù)適配器描述 afterBodyRead 方法能獲取到 body 參數(shù),我們能找到重點(diǎn)

  • afterBodyRead 方法
  • afterBodyRead 方法的 body 參數(shù)
    我們可以根據(jù)這個(gè)特點(diǎn),實(shí)現(xiàn)自己的適配器

5. 拓展 Spring 的適配器,實(shí)現(xiàn)自己的適配器

public abstract class AdviceAdapter extends RequestBodyAdviceAdapter {

	// 暴露關(guān)心的參數(shù)
	abstract void validate(Object body);

	@Override
	public boolean supports(MethodParameter methodParameter, @Nullable Type targetType, @Nullable Class<? extends HttpMessageConverter<?>> converterType) {
		return Objects.nonNull(methodParameter.getMethodAnnotation(RequestValidated.class));
	}

	@Override
	@Nonnull
	public Object afterBodyRead(@Nonnull Object body, @Nullable HttpInputMessage inputMessage, MethodParameter parameter,
								@Nullable Type targetType, @Nullable Class<? extends HttpMessageConverter<?>> converterType) {
		// 嵌入切面
		validate(body);
		return input;
	}
}

6. 在自己的適配器上實(shí)現(xiàn)邏輯

// 注意切 RequestBody 用的注解是 ControllerAdvice
@ControllerAdvice
public class ValidateAdvice extends AdviceAdapter {

	// 具體實(shí)現(xiàn)
    @Override
    void validate(Object json) {
        
    }
}

7. 后記

之前整理過適配器模式的內(nèi)容,現(xiàn)在感受更深了。
適配器可以多個(gè)配合起來工作,一個(gè)形象的圖用來比喻這種設(shè)計(jì):
【Spring MVC】獲取 @RequsetBody 標(biāo)識(shí)的對(duì)象,使用適配器模式增加代碼可讀性文章來源地址http://www.zghlxwxcb.cn/news/detail-498978.html

到了這里,關(guān)于【Spring MVC】獲取 @RequsetBody 標(biāo)識(shí)的對(duì)象,使用適配器模式增加代碼可讀性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器

    Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器

    目錄 ? 一、使用Servlet原生對(duì)象獲取參數(shù) 1.1?控制器方法 1.2?測(cè)試結(jié)果 二、自定義參數(shù)類型轉(zhuǎn)換器 2.1?編寫類型轉(zhuǎn)換器類 2.2?注冊(cè)類型轉(zhuǎn)換器對(duì)象? 2.3?測(cè)試結(jié)果? 三、編碼過濾器 3.1?JSP表單 3.2?控制器方法 3.3?配置過濾器 3.4 測(cè)試結(jié)果? 往期專欄文章相關(guān)導(dǎo)讀? 1. Maven系列專

    2024年02月10日
    瀏覽(32)
  • Spring MVC學(xué)習(xí)隨筆-控制器(Controller)開發(fā)詳解:調(diào)用業(yè)務(wù)對(duì)象、父子工廠拆分(applicationContext.xml、dispatcher.xml)

    Spring MVC學(xué)習(xí)隨筆-控制器(Controller)開發(fā)詳解:調(diào)用業(yè)務(wù)對(duì)象、父子工廠拆分(applicationContext.xml、dispatcher.xml)

    學(xué)習(xí)視頻:孫哥說SpringMVC:結(jié)合Thymeleaf,重塑你的MVC世界!|前所未有的Web開發(fā)探索之旅 ?? 1. 接收客戶端(Client)請(qǐng)求參數(shù)【講解完畢】2. 調(diào)用業(yè)務(wù)對(duì)象【講解】3. 頁面跳轉(zhuǎn) dispatcher.xml DAO Service Controller 現(xiàn)有SSM開發(fā)中存在的問題 MVC層的對(duì)象(Controller, mvc:annotation-driven/,視圖解

    2024年02月05日
    瀏覽(25)
  • Spring - 更簡(jiǎn)單的獲取 Bean 對(duì)象

    Spring - 更簡(jiǎn)單的獲取 Bean 對(duì)象

    目錄 二、獲取 Bean 對(duì)象(對(duì)象裝配或者對(duì)象注入) 1. 屬性注入 1.1 屬性注入的優(yōu)點(diǎn)和缺點(diǎn): 2. Setter注入 ?2.1?Setter注入的優(yōu)點(diǎn)和缺點(diǎn) 3. 構(gòu)造方法注入(spring 官方推薦的對(duì)象注入方式) 3.1?構(gòu)造方法的優(yōu)點(diǎn)和缺點(diǎn) 4. @Autowired 注解 和 @Resource 注解的區(qū)別 4.1 @Autowired 和 @Source 的區(qū)

    2024年02月16日
    瀏覽(21)
  • spring中存儲(chǔ)和獲取bean對(duì)象

    spring中存儲(chǔ)和獲取bean對(duì)象

    存儲(chǔ) Bean 分為以下 2 步: 存儲(chǔ) Bean 之前,先得有 Bean 才?,因此先要?jiǎng)?chuàng)建?個(gè) Bean, 說白了也就是寫一個(gè)類。 告訴spring,把這個(gè)類的對(duì)象存起來。 編寫 User 類, 有 sayHi 方法。 告訴 spring ,把這個(gè)類的對(duì)象存起來。 在配置文件中可以通過 bean 標(biāo)簽來告訴 spring 把對(duì)象存起來。

    2024年02月15日
    瀏覽(25)
  • 【Spring MVC】Spring MVC的功能使用和相關(guān)注解介紹

    【Spring MVC】Spring MVC的功能使用和相關(guān)注解介紹

    Spring MVC主要有三個(gè)功能: 連接 獲取參數(shù) 輸出數(shù)據(jù) 對(duì)于 Spring MVC 來說,掌握了以上 3 個(gè)功能就相當(dāng)于掌握了Spring MVC。 連接的功能:將?戶(瀏覽器)和 Java 程序連接起來,也就是訪問?個(gè)地址能夠調(diào)?到我們的Spring 程序。 先創(chuàng)建一個(gè)SpringMVC項(xiàng)目,過程和SpringBoot項(xiàng)目創(chuàng)建相

    2024年02月16日
    瀏覽(22)
  • Spring——更快捷的存儲(chǔ) / 獲取Bean對(duì)象

    Spring——更快捷的存儲(chǔ) / 獲取Bean對(duì)象

    本人是一個(gè)普通程序猿!分享一點(diǎn)自己的見解,如果有錯(cuò)誤的地方歡迎各位大佬蒞臨指導(dǎo),如果你也對(duì)編程感興趣的話,互關(guān)一下,以后互相學(xué)習(xí),共同進(jìn)步。這篇文章能夠幫助到你的話,勞請(qǐng)大家點(diǎn)贊轉(zhuǎn)發(fā)支持一下! 上篇文章中,向Spring容器中添加對(duì)象,還要去配置文件里手動(dòng)添

    2024年02月15日
    瀏覽(34)
  • 【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu)

    【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu)

    ?? 博客主頁:從零開始的-CodeNinja之路 ? 收錄文章:【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu) ??歡迎大家點(diǎn)贊??評(píng)論??收藏?文章 SpringWebMVC是基于ServletAPI構(gòu)建的原始Web框架,從?開始就包含在Spring框架中。它的正式名稱“SpringWebMVC”來?其源模塊的名稱(Spri

    2024年04月17日
    瀏覽(93)
  • Spring Batch 作業(yè)對(duì)象-作業(yè)參數(shù)設(shè)置與獲取

    Spring Batch 作業(yè)對(duì)象-作業(yè)參數(shù)設(shè)置與獲取

    目錄 引言 JobParameters 作業(yè)參數(shù)設(shè)置 作業(yè)參數(shù)獲取 方案1:使用ChunkContext類 ? 方案2:使用@Value 延時(shí)獲取 轉(zhuǎn)視頻版 書接上篇Spring Batch批處理-作業(yè)Job簡(jiǎn)介,上篇帶小伙伴們了解色作業(yè)Job對(duì)象,那這篇就看一下作業(yè)參數(shù)是啥一回事,同時(shí)要怎么設(shè)置參數(shù)并獲取參數(shù)的。 前面提到

    2023年04月15日
    瀏覽(22)
  • Spring系列學(xué)習(xí)九、Spring MVC的使用

    Spring系列學(xué)習(xí)九、Spring MVC的使用

    本章我們將與大家一起探討Spring框架中的Web模塊中的一顆璀璨明珠——Spring MVC。在這個(gè)章節(jié)中,我們將對(duì)MVC設(shè)計(jì)模式、Spring MVC的工作原理、HandlerMapping和ViewResolver的作用,以及如何處理表單、文件上傳和異常處理等內(nèi)容有基本的了解。別擔(dān)心,我將以通俗易懂、幽默風(fēng)趣的方

    2024年02月01日
    瀏覽(21)
  • 【JavaEE】Spring中注解的方式去獲取Bean對(duì)象

    【JavaEE】Spring中注解的方式去獲取Bean對(duì)象

    【JavaEE】Spring的開發(fā)要點(diǎn)總結(jié)(3) 在前面的代碼里,我們獲取Bean對(duì)象也比較麻煩: 本文章就是為了更方便地去獲取Bean對(duì)象~ 對(duì)象裝配 也叫 對(duì)象注入 那么有沒有對(duì)應(yīng)的注解去實(shí)現(xiàn)這個(gè)功能呢? Spring提供的三種實(shí)現(xiàn)方法: 屬性注入 構(gòu)造方法注入 Setter注入 而這種非明文獲取

    2024年02月15日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包