在Spring mvc中装饰/覆盖默认的MethodArgumentResolvers

时间:2017-10-02 22:08:19

标签: java spring-mvc

我想将一些预定义的数据放到mvc模型中。

我创建了自定义注释,并自定义了HandlerMethodArgumentResolver。 我的控制器现在看起来像这样:

@RequestMapping(value = "/{id}")
public void findById(@PathVariable(name = "id") Integer id, @CustomAnnotation Model model) {}

但是Spring mvc对于不同的注释和类有大约30个预定义的MethodArgumentResolvers,对于Model.class,Spring使用ModelMethodProcessor。

我可以以某种方式覆盖它吗?

1 个答案:

答案 0 :(得分:0)

最后,我扩展了RequestMappingHandlerAdapter并覆盖了

public void afterPropertiesSet() {
    super.afterPropertiesSet();
    List<HandlerMethodArgumentResolver> argumentResolvers = new ArrayList<>();
    argumentResolvers.add(new AveModelMethodProcessor());
    argumentResolvers.addAll(this.getArgumentResolvers());
    this.setArgumentResolvers(argumentResolvers);
}

之后我用自定义的一个替换了原始的RequestMappingHandlerAdapter:

@Configuration
public class MvcConfig extends DelegatingWebMvcConfiguration {

   @Override
   protected RequestMappingHandlerAdapter createRequestMappingHandlerAdapter(){
        return new MyRequestMappingHandlerAdapter();
   }

}

现在它有效。这是最佳方式吗?