欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

不多說,開搞。

快速模擬出這個使用場景

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

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

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

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

第② 個方案,我直接pass。

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

我的想法:

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

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

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

事不宜遲,開敲。

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

首先是來個自定義注解,用于標(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 {
}

② 自定義一個參數(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個函數(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個模擬的測試接口,玩一下,看看效果:

@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é)

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

相關(guān)文章

  • 基于jvm-sandbox的imock開發(fā)指南詳解

    基于jvm-sandbox的imock開發(fā)指南詳解

    這篇文章主要為大家介紹了基于jvm-sandbox的imock開發(fā)指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例

    Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例

    這篇文章主要介紹了Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例,幫助大家更好的理解和學(xué)習(xí)使用Spring Cloud,感興趣的朋友可以了解下
    2021-03-03
  • 淺談Thread.sleep()為什么要拋出中斷異常

    淺談Thread.sleep()為什么要拋出中斷異常

    本文主要介紹了淺談Thread.sleep()為什么要拋出中斷異常,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一文了解Java動態(tài)代理的原理及實(shí)現(xiàn)

    一文了解Java動態(tài)代理的原理及實(shí)現(xiàn)

    動態(tài)代理指的是,代理類和目標(biāo)類的關(guān)系在程序運(yùn)行的時候確定的,客戶通過代理類來調(diào)用目標(biāo)對象的方法,是在程序運(yùn)行時根據(jù)需要動態(tài)的創(chuàng)建目標(biāo)類的代理對象。本文將通過案例詳細(xì)講解一下Java動態(tài)代理的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-07-07
  • Java算法實(shí)現(xiàn)楊輝三角的講解

    Java算法實(shí)現(xiàn)楊輝三角的講解

    今天小編就為大家分享一篇關(guān)于Java算法實(shí)現(xiàn)楊輝三角的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 導(dǎo)入maven項(xiàng)目各個注解均報錯的解決方案

    導(dǎo)入maven項(xiàng)目各個注解均報錯的解決方案

    這篇文章主要介紹了導(dǎo)入maven項(xiàng)目各個注解均報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解Java中的數(shù)組與字符串相關(guān)知識

    詳解Java中的數(shù)組與字符串相關(guān)知識

    這篇文章主要介紹了詳解Java中的數(shù)組與字符串相關(guān)知識,包括操作字符串的一些基本方法列舉,需要的朋友可以參考下
    2015-09-09
  • IntelliJ IDEA 2020常用配置設(shè)置大全(方便干活)

    IntelliJ IDEA 2020常用配置設(shè)置大全(方便干活)

    這篇文章主要介紹了IntelliJ IDEA 2020常用配置設(shè)置大全(方便干活),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • SpringBoot權(quán)限認(rèn)證Sa-Token的使用總結(jié)

    SpringBoot權(quán)限認(rèn)證Sa-Token的使用總結(jié)

    Sa-Token是一款輕量級Java權(quán)限認(rèn)證框架,適用于快速搭建權(quán)限系統(tǒng),它提供了豐富的功能,包括登錄認(rèn)證、權(quán)限驗(yàn)證、角色驗(yàn)證、Session會話管理等,并且具有良好的社區(qū)支持和文檔資源,下面重點(diǎn)給大家介紹SpringBoot權(quán)限認(rèn)證Sa-Token的使用,感興趣的朋友一起看看吧
    2025-02-02
  • Java?Mybatis?foreach嵌套foreach?List<list<Object>>問題

    Java?Mybatis?foreach嵌套foreach?List<list<Object>&

    在MyBatis的mapper.xml文件中,foreach元素常用于動態(tài)生成SQL查詢條件,此元素包括item(必選,元素別名)、index(可選,元素序號或鍵)、collection(必選,指定迭代對象)、open、separator、close(均為可選,用于定義SQL結(jié)構(gòu))
    2024-09-09

最新評論