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

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ò)誤或未考慮完全的地方,望不吝賜教

前言

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

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

不多說,開搞。

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

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

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

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

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

第② 個(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)填充,后端自己整。

事不宜遲,開敲。

需要做什么, 三件套(要玩花樣,玩動(dòng)態(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;
    }
}

代碼簡(jiǎn)析:

可以看到有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è)模擬的測(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)來了,而且能拿到注解雜七雜八的參數(shù):

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

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

也是OK的:

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

總結(jié)

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

相關(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ì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一文了解Java動(dòng)態(tài)代理的原理及實(shí)現(xiàn)

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

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

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

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

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

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

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

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

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

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

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

    Sa-Token是一款輕量級(jí)Java權(quán)限認(rèn)證框架,適用于快速搭建權(quán)限系統(tǒng),它提供了豐富的功能,包括登錄認(rèn)證、權(quán)限驗(yàn)證、角色驗(yàn)證、Session會(huì)話管理等,并且具有良好的社區(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元素常用于動(dòng)態(tài)生成SQL查詢條件,此元素包括item(必選,元素別名)、index(可選,元素序號(hào)或鍵)、collection(必選,指定迭代對(duì)象)、open、separator、close(均為可選,用于定義SQL結(jié)構(gòu))
    2024-09-09

最新評(píng)論