Spring HandlerMethodArgumentResolver not executing

后端 未结 3 642
自闭症患者
自闭症患者 2020-12-10 14:53

I am using Spring MVC 3.2.2

I have defined a custom HandlerMethodArgumentResolver class like this

public class CurrentUserArgumentResolver implements         


        
相关标签:
3条回答
  • 2020-12-10 15:05

    If anybody ever wants to prioritize custom handlers over default handlers added by spring, here's a snippet that does it for me, I do this in a @Configuration file

    private @Inject RequestMappingHandlerAdapter adapter;
    
    @PostConstruct
    public void prioritizeCustomArgumentMethodHandlers () {
      List<HandlerMethodArgumentResolver> argumentResolvers = 
          new ArrayList<> (adapter.getArgumentResolvers ());
      List<HandlerMethodArgumentResolver> customResolvers = 
          adapter.getCustomArgumentResolvers ();
      argumentResolvers.removeAll (customResolvers);
      argumentResolvers.addAll (0, customResolvers);
      adapter.setArgumentResolvers (argumentResolvers);
    }
    
    0 讨论(0)
  • 2020-12-10 15:25

    OK I worked out that Spring was already resolving the Principal object in my above example and so my argument resolver was not kicking in. I had been lazy and added the @CurrentUser annotation to an existing parameter.

    So I changed my example

    @RequestMapping(method = RequestMethod.POST, value = "/update")
    public ModelAndView update(@RequestParam MultipartFile background, @CurrentUser Principal principal) {
      ...
    }
    

    to use my User model class

    @RequestMapping(method = RequestMethod.POST, value = "/update")
    public ModelAndView update(@RequestParam MultipartFile background, @CurrentUser User user) {
      ...
    }
    

    and now it works!

    0 讨论(0)
  • 2020-12-10 15:30

    I use the property customArgumentResolvers to load bean, like this:

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                        <property name="supportedMediaTypes">
                            <list>
                                <value>text/html;charset=UTF-8</value>
                                <value>text/plain;charset=UTF-8</value>
                                <value>application/json;charset=UTF-8</value>
                            </list>
                        </property>
                    </bean>
                </list>
            </property>
             <property name="customArgumentResolvers">
             <list>
                 <bean id="MyTestMethodArgumentResolver" class="com.gst.authorization.resolvers.MyTestMethodArgumentResolver"></bean>           
                 <bean id="currentUserMethodArgumentResolver" class="com.gst.authorization.resolvers.CurrentUserMethodArgumentResolver">
                                <property name="userModelClass" value="com.gst.model.appuser.AppUser" />
                        <property name="userModelRepository" ref="userRepository" />
                    </bean>
             </list>         
             </property>
        </bean> 
        <mvc:annotation-driven />
    
    0 讨论(0)
提交回复
热议问题