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

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

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

前言

我還是一貫如此, 有人不明白,沒玩過HandlerMethodArgumentResolver 。

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

不多說,開搞。

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

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

常見的方案核心思路無非有二

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

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

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

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

我的想法:

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

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

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

事不宜遲,開敲。

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

首先是來個(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;
    }
}

代碼簡析:

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

  • supportsParameter :看看誰支持誰不支持
  • resolveArgument :開始解析,寫邏輯代碼

③ 默認(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;
}

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

@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());
}

測試:

先看看post接口:

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

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

然后試試get請求效果:

也是OK的:

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

總結(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類的理解和使用

    Java中Object類的理解和使用

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

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

    這篇文章主要介紹了Java跳出多重嵌套循環(huán),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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à)值,希望對大家有所幫助。如有錯(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)資源被攔截的問題

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

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

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

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

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

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

    Mybatis結(jié)果集映射一對多簡單入門教程

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

最新評論

屏东市| 海丰县| 东光县| 马尔康县| 林口县| 普宁市| 西充县| 荆门市| 东台市| 开鲁县| 麟游县| 永仁县| 汶川县| 北宁市| 清远市| 沙雅县| 金湖县| 南宁市| 工布江达县| 茶陵县| 中牟县| 眉山市| 榆林市| 昌图县| 遂川县| 阿坝县| 兴海县| 林周县| 繁昌县| 巴中市| 乐业县| 梅州市| 常宁市| 吴江市| 抚顺县| 基隆市| 穆棱市| 乌苏市| 阿图什市| 昌黎县| 体育|