900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > HandlerMethodArgumentResolver 自定义参数解析器

HandlerMethodArgumentResolver 自定义参数解析器

时间:2020-04-26 22:55:55

相关推荐

HandlerMethodArgumentResolver 自定义参数解析器

HandlerMethodArgumentResolver 接口详情

public interface HandlerMethodArgumentResolver {boolean supportsParameter(MethodParameter parameter);@NullableObject resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;}

supportsParameter表示当前参数解析器能够处理什么样参数,当为true时才会执行resolveArgument方法。

resolveArgument实参的具体处理方法。

应用场景

Spring中@RequestParam,@PathVariable,@RequestBody注解的解析器等等.可以通过自定义注解在参数列表中自动注入当前登录用户.

代码实现

自定义注解

@Target({ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface CurrentUser {}

自定义参数解析,若参数中有我们自定义@CurrentUser注解时,将当前登录用户信息保存至其中

@Componetnpublic class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {@Resourceprivate RedisUtils redisUtils;public boolean supportsParameter(MethodParameter parameter) {// 当参数中使用了我们的自定义注解的时候if (parameter.hasParameterAnnotation(CurrentUser.class)) {return true;}return false;}public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {String token = httpServletRequest.getHeader("token");if(token == null){throw new CustomException(ResultStatus.ERROR.getCode(), "token不能为空");}Object obj = redisUtils.get(token);if(obj == null){throw new CustomException(ResultStatus.ERROR.getCode(), "token失效");}return (SysUser)obj;}}

将参数解析器添加至Application容器中

@Configurationpublic class ApplicationConfigurer extends WebMvcConfigurerAdapter {@Resourceprivate CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver;@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {super.addArgumentResolvers(argumentResolvers);argumentResolvers.add(currentUserMethodArgumentResolver);}}

控制层可以通过@CurrentUser注解来实现当前登录用户信息自动解析注入

@RequestMapping("/list")public ResultInfo<?> list(@CurrentUser SysUser sysUser,String name){// sysUser 就是当前登录用户的信息 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。