美文网首页
HandlerMethodArgumentResolver

HandlerMethodArgumentResolver

作者: 某某程序员_ | 来源:发表于2019-10-29 11:48 被阅读0次

    描述

    方法参数处理器,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<HandlerMethodArgumentResolver> 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();
        }
    }
    
    

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

    相关文章

      网友评论

          本文标题:HandlerMethodArgumentResolver

          本文链接:https://www.haomeiwen.com/subject/xszbvctx.html