成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringMvc參數解析器,讓你的方法入參更優雅

開發 前端
在開發中,經常會用到在控制層的對外請求接口入參中,希望通過一個注解來注入當前登錄用戶信息,從而在接口功能下行過程中,能夠一直傳下去,來實現用戶信息的獲取

spring參數解析器,讓你的方法入參更優雅

曾幾何時,我們編程從原始時代進入石器時代,開始擁有使用工具的思想,于是大量的工具,util和腳手架開始像雨后春筍似的出現,spring字如其名,像春天一樣,奠定了萬物復蘇的基石,于是基于spring的大量框架開始出現,如springMvc,springboot,springcloud等,生態一時無兩。作為使用spring多年的老用戶,總是會好奇我們在使用開發的各種功能,于是像貓一樣的探索,挖掘,模仿讓人著謎的各種設計。今天分享參數解析器,實現像@RequestBody一樣的功能,一個注解自動注入想要參數的方法解析器實戰。廢話不多說,直接上代碼!

功能背景描述:

在開發中,經常會用到在控制層的對外請求接口入參中,希望通過一個注解來注入當前登錄用戶信息,從而在接口功能下行過程中,能夠一直傳下去,來實現用戶信息的獲取

實現步驟如下:

定義當前登錄用戶類 CurrentUser:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 描述:當前登錄用戶 </br>
* 作者:IT學習道場 </br>
* 時間:2022-11-15 19:07
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CurrentUser {
private Long userId;
private String userName;
}

自定義注解:

import java.lang.annotation.*;
/**
* 描述:自定義用戶注解 </br>
* 作者:IT學習道場 </br>
* 時間:2022-11-15 16:56
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WlcUser {
}

當前用戶解析器:


import com.example.demo.annotation.WlcUser;
import com.example.demo.po.CurrentUser;
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;
/**
* 描述:當前用戶解析器 </br>
* 作者:IT學習道場 </br>
* 時間:2022-11-15 17:01
*/
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
//方法參數是否帶有 WlcUser注解,帶的話就解析執行下方 resolveArgument 方法
return parameter.hasParameterAnnotation(WlcUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
//1 這里面可以從httpHeader中獲取用戶標識或者其他屬性值,也可以通過springIoc中bean來執行增刪改查,rpc來獲取,但是要用spring的上下文來獲取bean
//2 也可以從token中解析出當前登錄用戶信息,返回也行對象 CurrentUser
//3 也可以從你自己定義的用戶上下文中獲取 CurrentUser,前提你要自己寫一個用戶上下文
//4 這里調用sprinIoc里管理的bean的話,需要 SpringContextUtil上下文來獲取bean,在調用方法
//5 這里只是自己new了一個當前用戶,來直接賦予加了 WlcUser 注解修飾的對象
CurrentUser currentUser = new CurrentUser(1L,"老王");
return currentUser;
}
}

把參數解析器注入到mvc中:

import com.example.demo.resolver.CurrentUserMethodArgumentResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* 描述:web攔截器,解析器配置類 </br>
* 作者:IT學習道場 </br>
* 時間:2022-11-15 19:09
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new CurrentUserMethodArgumentResolver());
}
}

現在測試controller測試實現:

import com.example.demo.annotation.WlcUser;
import com.example.demo.po.CurrentUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 描述:參數解析解TestController </br>
* 作者:IT學習道場 </br>
* 時間:2022-11-16 9:25
*/
@Slf4j
@RestController
@RequestMapping("/currentUserResolver")
public class CurrentUserResolverController {

@GetMapping("/currentUserResolve")
public void currentUserResolve(@WlcUser CurrentUser user){
log.info("參數解析器注入 CurrentUser = {}", user.toString());
}
}

請求下,控制臺日志:

圖片

參數解析自動注入成功!自己動手豐衣足食,去玩玩吧!

責任編輯:姜華 來源: IT學習道場
相關推薦

2021-03-18 10:56:59

SpringMVC參數解析器

2024-05-24 10:51:51

框架Java

2020-04-03 14:55:39

Python 代碼編程

2022-03-08 06:41:35

css代碼

2022-04-10 10:41:17

ESLint異步代碼

2019-09-29 16:17:25

Java代碼性能編程語言

2023-11-23 13:50:00

Python代碼

2018-07-12 14:20:33

SQLSQL查詢編寫

2023-02-07 06:55:26

Kafka消費消息

2023-07-10 09:39:02

lambdaPython語言

2024-07-03 08:13:56

規則執行器代碼

2024-07-30 14:09:19

裝飾器Python代碼

2016-03-04 11:06:20

更優秀程序員

2022-12-26 07:47:37

JDK8函數式接口

2025-05-29 08:35:39

Python代碼開發

2025-04-21 17:55:25

2024-01-23 11:21:24

2017-09-27 16:09:29

代碼

2021-03-16 10:39:29

SpringBoot參數解析器

2022-07-11 10:37:41

MapPart集合
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91亚洲精品国偷拍自产在线观看 | 自拍中文字幕 | 亚洲精品福利视频 | 在线免费视频一区 | 国产精品美女一区二区 | 成人免费大片黄在线播放 | 免费欧美视频 | 国产在线播 | 亚洲免费视频在线观看 | 久久久精彩视频 | 日韩精品久久久久久 | 色综合九九| 久久精品中文字幕 | 一区二区三区电影在线观看 | 日日综合| 国产一级大片 | 日日噜噜夜夜爽爽狠狠 | 欧美视频中文字幕 | www久久久 | 草草影院ccyy | 久久精品屋 | 成人在线电影网站 | 国产日韩一区二区 | 欧美国产亚洲一区二区 | 日韩精品成人在线 | 国户精品久久久久久久久久久不卡 | av片在线观看网站 | 国产日韩欧美精品一区二区 | 欧美一区二区免费视频 | 一级做a爰片性色毛片视频停止 | 日本免费一区二区三区四区 | 一区二区三区亚洲 | av在线一区二区 | 在线日韩欧美 | 深夜爽视频| 亚洲高清在线 | 911网站大全在线观看 | 亚洲高清一区二区三区 | 福利网址 | 91精品国产乱码久久久久久 | 九九在线视频 |