Spring Controller参数自定义注入,实现传递用户信息或者任意参数

文章介绍了如何在SpringMVC项目中通过实现HandlerMethodArgumentResolver接口创建自定义参数解析器,以便在Controller方法中优雅地注入User对象。同时,文章提到了使用Redisson实现分布式锁、限流和防重提交的功能,并指出相较于常见的使用自定义注解、HandlerInterceptor或ThreadLocal的方法,这种方式更为简洁。此外,文章还提及了在WebFlux中的类似配置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中需要将用户对象传递给需要的每一个请求,及注解中支持spel 的字段可以解析到对应信息。

redisson实现的分布式锁、限流、防重提交,依赖即可使用的注解工具,项目开源,可以了解一下

@RestController
public class HelloController {

    @RequestMapping("/")
    @RedissonLock(key="#user.id")
    public String index(User user) {
        return user.getName();
    }

}

public class User {
    private String name;
}

网上文章大多介绍 使用自定义注解、 HandlerInterceptor 或者 ThreadLocal,不优雅 且繁琐。

解决方案:

HandlerMethodArgumentResolver 是Spring框架中的自定义参数解析接口,可实现对Controller方法参数的自定义注入。

创建user参数解析器:

public class UserArgumentResolver implements HandlerMethodArgumentResolver {

	//supportsParameter 指定当参数类型为 User 类时才应用该参数解析器
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.getParameterType().equals(User.class);
    }

	//自定义的参数解析逻辑,例如创建一个 User 对象并返回
    @Override
  public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
       
        // 例如,从请求中获取用户信息
        // User user =  WebUtils.getUser().......
        // 创建 User 对象
        User user = new User();
        user.setId("1");
        user.setUsername("张三");
        return user;
    }
}

自定义的参数解析器 注册到 Spring MVC 中:


@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new UserArgumentResolver());
    }
}
//测试
@RestController
@RequestMapping("hello")
public class HelloController {
	@GetMapping
	@RepeatSubmit(value="custom",param = "#user.id")
	public String get(User user){
		System.out.println(user.getName());
	    return "userID: "+user.getId();
	}
}

日志输出:
张三

在 WebFlex中使用:

一七年夏:
WebFlex 要把 “WebMvcConfigurer” 换成 “WebFluxConfigurer”,“addArgumentResolvers” 换成 “configureArgumentResolvers”,其他的都一样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值