使用MockMvc自定义RequestMappingHandlerMapping

时间:2017-03-29 19:01:21

标签: java spring-mvc spring-test spring-test-mvc spring-mvc-test

我有一个自定义RequestMappingHandlerMapping类,它将特殊注释解释为其映射条件的一部分。它正在被实例化为bean:

@Configuration
@EnableWebMvc
public class ConfigServletConfig extends WebMvcConfigurerAdapter {
    @Bean
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping handlerMapping = new VersionRangeRequestMappingHandlerMapping();
        handlerMapping.setOrder(0);
        return handlerMapping;
    }
}

但是当我创建一个MockMvc对象进行测试时(使用standaloneSetup),这个映射处理程序并没有被使用。如果没有考虑额外的注释,映射将失败,因为我有多个具有相同@RequestMapping的控制器方法。注释是区分它们的原因。

如何配置MockMvc以使用此自定义映射处理程序?

3 个答案:

答案 0 :(得分:1)

  

如何配置MockMvc以使用此自定义映射处理程序?

从Spring Framework 4.3.x开始,目前无法使用RequestMappingHandlerMapping的{​​{1}}构建器注册自定义standaloneSetup()

但是,该团队正在考虑在Spring Framework 5.0中添加此类支持。

有关详细信息,请参阅SPR-15472

答案 1 :(得分:1)

对于那些仍在搜索中的用户,自从Spring更新到版本5.0(我相信)以来,就引入了自定义MockMvc requestHandlerMapping配置。

用法示例:

MockMvcBuilders.standaloneSetup(new MyAwesomeController())
        .setCustomHandlerMapping(() -> new MyAwesomeRequestMappingHandlerMapping())
        .build();

答案 2 :(得分:0)

您可以使用WebMvcConfigurerAdapter的覆盖getRequestMappingHandlerMapping方法进行配置。

@Configuration
public class ConfigServletConfig extends WebMvcConfigurerAdapter {

    @Override
    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
        RequestMappingHandlerMapping handlerMapping = new VersionRangeRequestMappingHandlerMapping();
        handlerMapping.setOrder(0);
        return handlerMapping;
    }
}