HandlerMethodArgumentResolver

描述
方法参数处理器,spring容器收到请求之后,对匹配的方法参数进行处理
通常用法:用户信息的统一获取及设置。
自定义方法参数处理器:

/** * @author zoum * @create 2019/10/29 11:16 */ public class MyArgumentResolver implements HandlerMethodArgumentResolver{/** * 判断参数是否匹配 * @param methodParameter * @return */ @Override public boolean supportsParameter(MethodParameter methodParameter) { return methodParameter.getParameterType().isAssignableFrom(LoginUser.class); }/** * 返回匹配参数的处理结果 * @param methodParameter * @param modelAndViewContainer * @param nativeWebRequest * @param webDataBinderFactory * @return * @throws Exception */ @Nullable @Override public Object resolveArgument(MethodParameter methodParameter, @Nullable ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, @Nullable WebDataBinderFactory webDataBinderFactory) throws Exception { LoginUser loginUser = new LoginUser(); loginUser.setUsername("zm"); loginUser.setPassword("zm"); return loginUser; } }

自定义处理器配置
/** * @author zoum * @create 2019/10/29 11:13 */ @Configuration public class MvcConfig implements WebMvcConfigurer{@Override public void addArgumentResolvers(List resolvers) { MyArgumentResolver argumentResolver = new MyArgumentResolver(); resolvers.add(argumentResolver); } }

定义参数类型
/** * @author zoum * @create 2019/10/29 11:28 */ @Data public class LoginUser {private String username; private String password; }

定义请求方法
@RestController public class HealthController {/** * loginUser不需要前台显示传参,通常前端传值sessionId或者token信息,以此在MyArgumentResolver 处理器里面进行获取并设置,在请求方法里面就可以直接使用loginUser * @param loginUser * @return */ @GetMapping("/health") public String health(LoginUser loginUser){ return "ok=" + loginUser.getUsername(); } }

【HandlerMethodArgumentResolver】测试
请求发起:http://localhost:8080/health
请求结果:ok=zm

    推荐阅读