概念
public interface HandlerMethodArgumentResolver {
boolean supportsParameter(MethodParameter parameter);
@Nullable
Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;
}
应用
自定义注解自动注入当前登录用户
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrentUser {
}
@Componetn
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Resource
private 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 BaseException("token is null");
}
Object obj = redisUtils.get(token);
if(obj == null){
throw new BaseException("invalid token");
}
return (SysUser)obj;
}
}
@Configuration
public class ApplicationConfigurer extends WebMvcConfigurerAdapter {
@Resource
private CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
super.addArgumentResolvers(argumentResolvers);
argumentResolvers.add(currentUserMethodArgumentResolver);
}
}
@RequestMapping("/list")
public ResultInfo<?> list(@CurrentUser SysUser sysUser,String name){
}