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

Springboot Controller接口默認(rèn)自動(dòng)填充業(yè)務(wù)實(shí)體參數(shù)值詳解

 更新時(shí)間:2025年05月12日 09:10:48   作者:小目標(biāo)青年  
這篇文章主要介紹了Springboot Controller接口默認(rèn)自動(dòng)填充業(yè)務(wù)實(shí)體參數(shù)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

我還是一貫如此, 有人不明白,沒(méi)玩過(guò)HandlerMethodArgumentResolver 。

那么很可能不止他一個(gè)人, 那么我就有必要出手。

不多說(shuō),開(kāi)搞。

快速模擬出這個(gè)使用場(chǎng)景

假如有好多接口,都需要用到 當(dāng)前的業(yè)務(wù)參數(shù), 這個(gè)業(yè)務(wù)場(chǎng)景需要的參數(shù) 是 當(dāng)前登錄人的信息。

常見(jiàn)的方案核心思路無(wú)非有二

① 后端寫(xiě)個(gè)解析+查詢(xún)函數(shù),哪里需要就調(diào)用一下

② 后端提供一個(gè)獲取登錄人信息接口,前端先調(diào)用接口,緩存起來(lái);然后哪些接口需要這個(gè)參數(shù),前端就從緩存拿出來(lái)然后傳過(guò)來(lái)。

第② 個(gè)方案,我直接pass。

  • 需要前端配合,前端存拿存拿很麻煩,哪個(gè)接口需要還得跟前端溝通
  • 前端的緩存什么時(shí)候需要更新?如果涉及改手機(jī)號(hào)或者一些參數(shù),但是token不失效,也就是業(yè)務(wù)標(biāo)識(shí)ID 不會(huì)變,那么前端的緩存數(shù)據(jù)就不是最新的
  • xxxx 暫時(shí)不想太多

我的想法:

優(yōu)化第①個(gè)方案

做到 減少重復(fù)代碼的輸出,做到簡(jiǎn)單使用、動(dòng)態(tài)使用、自動(dòng)填充。

也就是求救的小伙伴的想法思路,是的,自動(dòng)填充,后端自己整。

事不宜遲,開(kāi)敲。

需要做什么, 三件套(要玩花樣,玩動(dòng)態(tài),少不了自定義注解+aop):

首先是來(lái)個(gè)自定義注解,用于標(biāo)記,哪些接口需要用到我們默認(rèn)填充業(yè)務(wù)參數(shù):

①LoginUserX.java

import java.lang.annotation.*;


/**
 * @Author: JCccc
 * @Date: 2022-4-11 18:45
 * @Description:
 */
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LoginUserX {
}

② 自定義一個(gè)參數(shù)解析器 HandlerMethodArgumentResolver

LoginUserParamResolver.java

import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

import java.util.Objects;

/**
 * @Author: JCccc
 * @Date: 2022-4-11 18:45
 * @Description:
 */
public class LoginUserParamResolver  implements HandlerMethodArgumentResolver {


    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        if (parameter.getParameterType().isAssignableFrom(LoginUserAnalysis.class) && parameter.hasParameterAnnotation(LoginUserX.class)) {
            return true;
        }
        return false;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
       if (Objects.nonNull(parameter.getParameterAnnotation(LoginUserX.class))){
           String token = webRequest.getHeader("token");
           //解析token 、獲取 登錄用戶信息等等,或者是 拿你需要的業(yè)務(wù)參數(shù)
           return  new LoginUserAnalysis().setLoginNameAnalysis("JCcccc").setPhoneAnalysis("136919xxxxx").setTopRoleTypeAnalysis(1);
       }
       return null;
    }
}

代碼簡(jiǎn)析:

可以看到有2個(gè)函數(shù)

  • supportsParameter :看看誰(shuí)支持誰(shuí)不支持
  • resolveArgument :開(kāi)始解析,寫(xiě)邏輯代碼

③ 默認(rèn)填充的業(yè)務(wù)實(shí)體示例 LoginUserAnalysis.java

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class LoginUserAnalysis {

    private String loginNameAnalysis;
    private String phoneAnalysis;
    private Integer topRoleTypeAnalysis;
}

最后寫(xiě)2個(gè)模擬的測(cè)試接口,玩一下,看看效果:

@GetMapping("doGetTest")
public  String doGetTest(@LoginUserX LoginUserAnalysis loginUserAnalysis,String queryName){
    System.out.println("接收到的參數(shù):"+queryName);
    System.out.println("默認(rèn)填充的參數(shù)"+loginUserAnalysis.toString());
    return "ok";
}

@PostMapping("doPostTest")
public  void doPostTest(@LoginUserX LoginUserAnalysis loginUserAnalysis, @RequestBody Car car){
    System.out.println("接收到的參數(shù):"+car.toString());
    System.out.println("默認(rèn)填充的參數(shù)"+loginUserAnalysis.toString());
}

測(cè)試:

先看看post接口:

debug,可以看到進(jìn)來(lái)了,而且能拿到注解雜七雜八的參數(shù):

最后數(shù)據(jù)填充成功:

然后試試get請(qǐng)求效果:

也是OK的:

好了該篇就到這,想要默認(rèn)填充哪些業(yè)務(wù)參數(shù),自己開(kāi)整吧。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)戰(zhàn)之在線寄查快遞系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之在線寄查快遞系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用Java制作一個(gè)在線寄查快遞系統(tǒng),文中采用的技術(shù)有java、SpringBoot、FreeMarker、Mysql,需要的可以參考一下
    2022-02-02
  • java設(shè)計(jì)優(yōu)化之單例模式

    java設(shè)計(jì)優(yōu)化之單例模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)優(yōu)化中的單例模式,深入學(xué)習(xí)java單例模式,感興趣的朋友可以參考一下
    2016-03-03
  • Java中Object類(lèi)的理解和使用

    Java中Object類(lèi)的理解和使用

    Object類(lèi)是java.lang包下的核心類(lèi),Object類(lèi)是所有類(lèi)的父類(lèi),何一個(gè)類(lèi)時(shí)候如果沒(méi)有明確的繼承一個(gè)父類(lèi)的話,那么它就是Object的子類(lèi),本文將通過(guò)代碼示例詳細(xì)介紹一下Java中Object類(lèi)的理解和使用,需要的朋友可以參考下
    2023-06-06
  • Java跳出多重嵌套循環(huán)代碼實(shí)例

    Java跳出多重嵌套循環(huán)代碼實(shí)例

    這篇文章主要介紹了Java跳出多重嵌套循環(huán),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java中關(guān)于size()>0?和isEmpt()的性能考量

    Java中關(guān)于size()>0?和isEmpt()的性能考量

    這篇文章主要介紹了Java中關(guān)于size()>0?和isEmpt()性能考量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Flutter實(shí)現(xiàn)文本組件、圖標(biāo)及按鈕組件的代碼

    Flutter實(shí)現(xiàn)文本組件、圖標(biāo)及按鈕組件的代碼

    這篇文章主要介紹了Flutter實(shí)現(xiàn)文本組件、圖標(biāo)及按鈕組件的代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • 解決使用security和靜態(tài)資源被攔截的問(wèn)題

    解決使用security和靜態(tài)資源被攔截的問(wèn)題

    這篇文章主要介紹了解決使用security和靜態(tài)資源被攔截的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot+Shiro+Redis+Mybatis-plus 實(shí)戰(zhàn)項(xiàng)目及問(wèn)題小結(jié)

    SpringBoot+Shiro+Redis+Mybatis-plus 實(shí)戰(zhàn)項(xiàng)目及問(wèn)題小結(jié)

    最近也是一直在保持學(xué)習(xí)課外拓展技術(shù),所以想自己做一個(gè)簡(jiǎn)單小項(xiàng)目,于是就有了這個(gè)快速上手 Shiro 和 Redis 的小項(xiàng)目,說(shuō)白了就是拿來(lái)練手調(diào)調(diào) API,然后做完后拿來(lái)總結(jié)的小項(xiàng)目,感興趣的朋友一起看看吧
    2021-04-04
  • Java異常(Exception)處理以及常見(jiàn)異??偨Y(jié)

    Java異常(Exception)處理以及常見(jiàn)異??偨Y(jié)

    在《Java編程思想》中這樣定義異常,阻止當(dāng)前方法或作用域繼續(xù)執(zhí)行的問(wèn)題,雖然java中有異常處理機(jī)制,但是要明確一點(diǎn),決不應(yīng)該用"正常"的態(tài)度來(lái)看待異常,這篇文章主要給大家介紹了關(guān)于Java異常(Exception)處理以及常見(jiàn)異常的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Mybatis結(jié)果集映射一對(duì)多簡(jiǎn)單入門(mén)教程

    Mybatis結(jié)果集映射一對(duì)多簡(jiǎn)單入門(mén)教程

    本文給大家介紹Mybatis結(jié)果集映射一對(duì)多簡(jiǎn)單入門(mén)教程,包括搭建數(shù)據(jù)庫(kù)環(huán)境的過(guò)程,idea搭建maven項(xiàng)目的代碼詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06

最新評(píng)論

泰和县| 云南省| 平原县| 信阳市| 彰武县| 合水县| 琼结县| 棋牌| 城市| 贵阳市| 南丰县| 菏泽市| 鞍山市| 志丹县| 金秀| 凌源市| 子洲县| 昌黎县| 彭州市| 濮阳市| 江阴市| 枣强县| 麻城市| 宿松县| 尼木县| 九龙坡区| 自治县| 永顺县| 昆山市| 仲巴县| 长子县| 来安县| 清远市| 礼泉县| 恭城| 吉水县| 麻栗坡县| 西乌珠穆沁旗| 孝昌县| 麻栗坡县| 富裕县|