概述
文章目录
- 简介
- 代码
- 自定义注解 @LoginUser
- 自定义一个解析器LoginUserHandlerMethodArgumentResolver
- 使用
简介
调用接口时,有可能有能多参数,Spring项目中就会定义很多的@RequestParam,让我们很抓毛。好在Spring 3.1开始提供的接口HandlerMethodArgumentResolver
,实现此接口可以自定义对象,比如可以解析自定义的时间格式、自定义解析Map对象等这些spring原本不支持的对象格式。
代码
这一以一个Integer类型做例子。代码如下:
自定义注解 @LoginUser
LoginUser.java
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {
}
自定义一个解析器LoginUserHandlerMethodArgumentResolver
我们在解析器中返回一个固定的Object
,实际情况是可以返回一个自定义对象。
LoginUserHandlerMethodArgumentResolver.java
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
public static final String LOGIN_TOKEN_KEY = "X-Litemall-Token";
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().isAssignableFrom(Integer.class) && parameter.hasParameterAnnotation(LoginUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
// return new Integer(1);
String token = request.getHeader(LOGIN_TOKEN_KEY);
if (token == null || token.isEmpty()) {
return null;
}
return UserTokenManager.getUserId(token);
}
}
其次还要将我们自己实现的WxWebMvcConfiguration
加入到参数解析器集中,如下:
@Configuration
public class WxWebMvcConfiguration implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new LoginUserHandlerMethodArgumentResolver());
}
}
使用
在控制器中使用,@LoginUser Integer userId
可自动注入自定义的类型。
@GetMapping("list")
public Object list(@LoginUser Integer userId) {
if (userId == null) {
return ResponseUtil.unlogin();
}
List<LitemallAddress> addressList = addressService.queryByUid(userId);
return ResponseUtil.okList(addressList);
}
最后
以上就是强健高山为你收集整理的通过 HandlerMethodArgumentResolver 自定义入参类型的全部内容,希望文章能够帮你解决通过 HandlerMethodArgumentResolver 自定义入参类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复