public class TokenArgumentResolver implements HandlerMethodArgumentResolver {
private static final Logger log = LoggerFactory.getLogger(TokenArgumentResolver.class);
public TokenArgumentResolver() {
}
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.getParameterType().equals(A.class);
}
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) {
return AuthUtil.getUser();
}
}
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.getParameterType().equals(A.class);
}
这个方法检查控制器方法的参数类型是否为A
。如果是,返回true
,表明这个自定义的HandlerMethodArgumentResolver
能够处理这个参数。如果不是,返回false
,意味着Spring MVC会继续查找下一个HandlerMethodArgumentResolver
来处理这个参数。
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) {
return AuthUtil.getUser();
}
这个方法负责实际解析参数的逻辑。在这里,它简单地调用了AuthUtil.getUser()
方法,假设这是一个全局的认证工具类,能够获取当前登录的用户信息。返回的结果将作为KeeperUser
类型的参数值,直接传递给控制器方法。
这种类型的HandlerMethodArgumentResolver
特别适用于需要频繁访问当前登录用户信息的场景。例如,你可能有多个控制器方法都需要访问用户的详细信息,如用户名、权限等级等。通过使用自定义的HandlerMethodArgumentResolver
,你可以在方法签名中直接声明A
类型的参数,而不需要每次手动调用AuthUtil.getUser()
。
注册Resolver
为了使这个自定义的HandlerMethodArgumentResolver
生效,你需要在Spring MVC的配置中注册它。这通常通过实现WebMvcConfigurer
接口并重写addArgumentResolvers
方法来完成:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new YourCustomResolver());
}
}