HandlerMethodArgumentResolver 实现 Springboot 自定义参数解析

SpringBoot Web开发使用注解+参数解析器实现自定义参数解析 本篇文章介绍如何实现自定义参数解析,主要使用的是注解+方法参数处理器来实现这个功能。请观众老爷们多多支持,并在评论区批评指正! 阅读详情

实现 HandlerMethodArgumentResolver 接口

自定义解析器需要实现 HandlerMethodArgumentResolver 接口,此接口包含两个函数:

public interface HandlerMethodArgumentResolver {
	/**
	 * 入参筛选
	 *
	 * @param methodParameter 参数集合
	 * @return 格式化后的参数
	 */
    boolean supportsParameter(MethodParameter var1);

	/**
	 * 出参设置
	 *
	 * @param methodParameter       入参集合
	 * @param modelAndViewContainer model 和 view
	 * @param nativeWebRequest      web相关
	 * @param webDataBinderFactory  入参解析
	 * @return 包装对象
	 */
    @Nullable
    Object resolveArgument(MethodParameter var1, @Nullable ModelAndViewContainer var2, NativeWebRequest var3, @Nullable WebDataBinderFactory var4) throws Exception;
}

实现接口的类

public class MenuHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
	@Override
	public boolean supportsParameter(MethodParameter methodParameter) {
		return methodParameter.getParameterType().equals(Person.class);
	}

	@Override
	public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
		//为了测试先写固定用户名,实际取真实用户
		return new Person("娃哈哈", 10, "长安街");
	}
}

Person 类

public class Person {

	private String name;
	private Integer age;
	private String address;

	public Person() {
	}

	public Person(String name, Integer age, String address) {
		this.name = name;
		this.age = age;
		this.address = address;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	
	@Override
	public String toString() {
		return "Person{" +
			"name='" + name + '\'' +
			", age=" + age +
			", address='" + address + '\'' +
			'}';
	}	
}

在 Web 配置类中创建实例

注意这个方法 addArgumentResolvers 中的这段代码 argumentResolvers.add(new MenuHandlerMethodArgumentResolver()); 这段代码的意思就把上一步创建的 MenuHandlerMethodArgumentResolver.java 类交给 Spring

@Slf4j
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
@AllArgsConstructor
@EnableConfigurationProperties({
	ZycUploadProperties.class, ZycFileProperties.class
})
public class ZycWebMvcConfiguration implements WebMvcConfigurer {

	private final ZycUploadProperties zycUploadProperties;

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		String path = zycUploadProperties.getSavePath();
		registry.addResourceHandler("/upload/**")
			.addResourceLocations("file:" + path + "/upload/");
	}

	@Override
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
		argumentResolvers.add(new TokenArgumentResolver());
		argumentResolvers.add(new MenuHandlerMethodArgumentResolver());
	}

}

在 Controller 中创建请求的方法

	@RequestMapping(value = {"/test"}, method = RequestMethod.GET)
	@ResponseBody
	public Person test(Person person) {
		System.out.println(person);
		return person;
	}

测试

在浏览器请求上一步创建的接口 http://127.0.0.1:8080/person/test get请求,并且不需要传任何参数
浏览器结果 {"name":"娃哈哈","age":10,"address":"长安街"}
控制台结果 Person{name='娃哈哈', age=10, address='长安街'}

可以通过实现 HandlerMethodArgumentResolver 接口来实现对自定义的参数进行解析。
比如可以解析自定义的时间格式、自定义解析Map对象等这些spring原本不支持的对象格式。

参考

SpringBoot自定义参数解析器HandlerMethodArgumentResolver应用详解 上面我们介绍了HandlerMethodArgumentResolver的实现原理,有时候我们也需要自定义一个参数解析器解析某个参数,比如开发中有时候我们需要获取用户的登录信息校验权限,每个需要校验权限接口都写个一段获取用户信息的逻辑这样有些冗余,这时我们可以自定义一个参数解析器去解析用户登录信息并封装成存储用户信息实体的对象。要解析的方法参数对象,可以从对象获取参数的属性(如参数的类型,所修饰的注解等)参数解析的具体实现逻辑,最后返回参数具体解析后封装的对象。 阅读详情

相关推荐

五、2K0300 久久派开发板的GPIO控制与Shell脚本自动化实战

本文详细介绍了基于龙芯2K0300处理器的久久派开发板的GPIO控制方法,通过sysfs文件系统实现LED控制和传感器读取。重点讲解了Shell脚本自动化实战,包括LED闪烁、流水灯效果和传感器数据采集,为物联网项目开发提供完整解决方案。

silver的专栏 686

Springboot使用参数解析器HandlerMethodArgumentResolver,解析请求头里的数据

Springboot

qq_43649937的博客 1596

01-嵌入式入门-如何看原理图

最近由于找到的工作是偏于嵌入式方向,因此又重新开始学习已经丢弃两年的知识。新手学习知识感觉有一个通病:喜欢收集各种各样的视频、资料,网盘里收藏一大堆,但是却从没有打开看过,到头来还是个小白,只听说过几个概念,而实际却是不知所云,这就是所谓的"学习综合征"。而我也是其中的一员,最近痛定思痛,就准备根据一套资料沉下心学习下去,不再进入收集资料的大军。...

weixin_34010566的博客 4483

HandlerMethodArgumentResolver用法

HandlerMethodArgumentResolver 是Spring MVC框架中的一个核心接口,它扮演着数据绑定和类型转换的重要角色,负责处理控制器方法参数的解析与注入。这一机制极大地增强了Spring框架处理HTTP请求的灵活性和便捷性,允许开发者自定义参数解析逻辑,以支持复杂类型、自定义注解或从请求中提取特定信息。

q1372302825的博客 4231

HP iLO4报错自救指南:Embedded Flash/SD-CARD故障的3种修复方案(附详细截图)

本文详细解析了HP iLO4出现'Embedded Flash/SD-CARD'故障时的3种修复方案,包括快速恢复、固件级修复和硬件级解决方案。通过Diagnostics诊断和Self-Test报告,帮助运维人员高效解决问题,并提供预防性维护建议,确保服务器远程管理功能的稳定性。

weixin_42522953的博客 508

【国产化信创实践】宝兰德bes中间件集成springboot

【国产化信创实践】宝兰德bes中间件集成springboot

项目管理、软件工厂、vue研发、Java研发、中国文化等。 1万+

【SpringBoot】HandlerMethodArgumentResolver的简单使用

HandlerMethodArgumentResolver的简单使用 一、前言 现在项目有这样的一个需求,前端在请求头中传入userId,后端需要在controller中接收到此id的整个用户信息。 面对这样的需求,我们当然可以拿到userId后,在controller调用的service中请求数据库,从而拿到整个用户信息。不过这样重复的代码...

阳阳的博客 8191

嵌入式音频架构 - AudioWeaver 整体概念

AudioWeaver 是DSP Concept公司推出的基于嵌入式平台的音频框架。由AWE Core embedded processing engine 和 Audio Weaver Designer IDE 组成。 Audio Weaver Designer 有三个版本,ST Edition, Standard Edtion 和 Pro Edtion。 Audio Weaver Designer界面: Audio Weaver 的整体使用架构: AWD算法流文件,AWS配置脚本文件,AWB嵌入式b

甲客实验室 6869

SpringBoot 自动解析参数:HandlerMethodArgumentResolver

HandlerMethodArgumentResolver 是SpringBoot 中的一个接口,也是Spring 面向切面的编程的一种提现,这个接口我们从名称上大概能了解其中的意思:操作方法参数解析 ,换句话的意思就是说解析接口的参数方法,那么什么时候解析,自然是在调用函数之前解析,那些方法需要解析,自然是需要指定方法解析

datouniao1的博客 2457

【工控基础】UVW平台踩坑

1 每个轴按顺时针或逆时针走一个距离,就是旋转。 2 图中W动,U轴V轴不动,就是X方向的平移 3 图中U轴V轴同时动,X不动,就是Y方向的平移。

songhuangong123的博客 6943

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1407

SpringBoot实现HandlerMethodArgumentResolver(自定义参数解析器)

对Controller层请求参数进行处理 自定义注解 @Documented @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface CommonParams { String[] params() default {}; } 自定义参数解析器 ...

moxiaomo0804的博客 2068

DeepLabv3+改进专栏

🔥【DeepLabv3+改进专栏!探索语义分割新高度】🌟 你是否在为图像分割的精度与效率发愁?📢 本专栏重磅推出:✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化✅ 即插即用模块:ASPP+升级、解码器。

AIcurator的博客 2575

springboot自定义参数解析HandlerMethodArgumentResolver,实现接口访问设备信息记录

在项目开发中,我们经常需要记录用户是通过什么设备和操作系统来访问接口,以此来做不通的操作处理。尤其是公司软件针对多国用户,可以切换语言。我们后台经常需要根据语言来做不同的操作。 下面我们讲解如何通过实现HandlerMethodArgumentResolver的方法来实现用户访问接口时的设备信息 首先我们们需要准备一些必要的jar包 <!-- https://mvnre...

weixin_42324471的博客 668

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

springboot自定义拦截器和自定义参数解析器HandlerMethodArgumentResolver,自定义注解实现客户端接口用户身份确认获取

说明 客户端的接口一般都是需要用户登录才能访问信息的,验证用户身份是否登录,获取用户信息。一般做法就是客户端把token存进header中,服务器查询token是否失效和正确(服务器存token可以存进redis中,也可以使用JWT),然后通过token获取用户信息并正常访问接口。 自定义拦截器 拦截器和过滤器的区别就不过多描述了,我的理解就是拦截器是在具体的方法层次(springmvc)拦...

Java_135的博客 1370

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

springboot自定义参数解析HandlerMethodArgumentResolver

springboot自定义参数解析HandlerMethodArgumentResolver 0.5272018.08.29 19:23:04字数 177阅读 9440 自定义解析器需要实现HandlerMethodArgumentResolver接口,HandlerMethodArgumentResolver接口包含两个接口函数: public interface HandlerMeth...

爱拼才会win 601

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

自定义spring boot参数解析器HandlerMethodArgumentResolver

spring boot参数解析器 spring boot参数解析器可以对方法参数进行一些封装处理、校验处理。 接口HandlerMethodArgumentResolver: public interface HandlerMethodArgumentResolver { boolean supportsParameter(MethodParameter var1); @Nullable Object resolveArgument(MethodParameter var1, @Nu

创意空间站 323

Spring自定义参数解析器

Spring自定义参数解析器 HandlerMethodArgumentResolver

zcx的博客 833

SpringBoot接口传递自定义参数,参数解析器

我的需求:编写了一个日志微服务,使用方式是 创建日志对象 - 日志流程 - 完成日志对象,这样的方式使用时就需要在每个接口都去创建和完成一下,多出了一点代码。在 SpringBoot 中,我们接收接口的参数都是直接写在函数参数上,例如传递了一个name于是就想到能不能像上面这种方式将创建和完成封装起来,就开始寻找解决方案。之前一直使用的是过滤器,但我的需求过滤器是没有办法实现的,过滤器可以给请求注入字符串,但不能注入对象例如 User 类,想要的效果如下后面学了下拦截器,发现拦截器也不行…

砷碲 - Shendi 1117

SpringBoot HandlerMethodArgumentResolver接口自定义参数解析器

⏹SpringBoot HandlerMethodArgumentResolver接口自定义参数解析器

菜鸟记录 958

在Spring Boot中实现自定义参数解析器

在Spring Boot应用程序中,处理请求时经常需要解析并处理传入的参数。Spring MVC提供了强大的参数解析机制,但有时候我们可能需要定制自己的参数解析器以满足特定的需求。本文将介绍如何在Spring Boot中自定义参数解析器。今日内容介绍,大约花费9分钟参数解析器属于spring-web包中提供的组件,springmvc框架中对应提供了很多参数解析器。//此处request对象就是通过Springmvc提供的参数解析器帮我们注入的在上面的方法中,我们声明了一个类型为。

竹林幽深 584

HandlerMethodArgumentResolver用于统一获取当前登录用户

为了将 HTTP 请求参数转换为 Java 对象,我们需要创建一个自定义的实现类。在这个类中,我们需要实现方法和方法。要在 Spring Boot 应用程序中使用自定义的实现类,我们需要将其注册到应用程序上下文中。为此,我们可以创建一个类,并实现接口。在这个类中,我们需要重写方法,并将自定义的实现类添加到参数解析器列表中。3.1 自定义权限拦截器自定义权限拦截器AuthenticationInterceptor,需实现HandlerInterceptor。

zzhongcy的专栏 1705

SpringBoot参数解析器

SpringBoot参数解析器

weixin_44482104的博客 657

SpringBoot中自定义参数解析器,实现如@RequestParam的功能

SpringBoot中自定义参数解析器,实现如@RequestParam的功能

Zhaof_Notes 2856

SpringBoot集成自定义HandlerMethodArgumentResolver

传统SpringMVC集成自定义HandlerMethodArgumentResolver的方式为:http://www.cnblogs.com/yangzhilong/p/6282218.html 在SpringBoot中是去配置文件化的,具体做法有: 1、启动类继承WebMvcConfigurerAdapter 2、另外写一个@Configuration注解的来继承WebMvcConfi...

weixin_30242907的博客 88

HandlerInterceptor+HandlerMethodArgumentResolver统一获取当前登录的用户

目录 一、最原始直接 二、AOP 三、拦截器+方法参数解析器 3.1 自定义权限拦截器 3.2 自定义参数注解 3.3 自定义方法参数解析器 3.4 配置MVC 环境:SpringBoot 2.0.4.RELEASE 需求:很多Controller方法,刚进来要先获取当前登录用户的信息,以便做后续的用户相关操作。 准备工作:前端每次请求都传token,后端封装一方法tokenUtils.getUserByToken(token),根据token解析得到currentUserInfo。...

qq_38178433的博客 1019
上一篇: HashMap和ConcurrentHashMap面试技术点
下一篇: MySQL select into outfile 导出和 load data 的使用
bbccloud
博客等级 码龄11年 23粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值