【问题标题】:Decorate/override default MethodArgumentResolvers in Spring mvc在 Spring mvc 中装饰/覆盖默认 MethodArgumentResolvers
【发布时间】:2017-10-03 18:03:04
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    最后我扩展了 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();
       }
    
    }
    

    现在可以了。这是最佳方式吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      相关资源
      最近更新 更多