项目中需要将用户对象传递给需要的每一个请求,及注解中支持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();
}
}
日志输出:
张三文章来源:https://www.toymoban.com/news/detail-534751.html
在 WebFlex中使用:
一七年夏:
WebFlex 要把 “WebMvcConfigurer” 换成 “WebFluxConfigurer”,“addArgumentResolvers” 换成 “configureArgumentResolvers”,其他的都一样。文章来源地址https://www.toymoban.com/news/detail-534751.html
到了这里,关于Spring Controller参数自定义注入,实现传递用户信息或者任意参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!