是否可以扩展WebMvcConfigurationSupport并使用WebMvcAutoConfiguration?
我需要扩展WebMvcConfigurationSupport类,修改两件事:
@Configuration public class WebConfig extends WebMvcConfigurationSupport { @Override public RequestMappingHandlerMapping requestMappingHandlerMapping() { RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping(); handlerMapping.setRemoveSemicolonContent(false); handlerMapping.setOrder(1); return handlerMapping; } }
我喜欢从WebMvcAutoConfiguration类注册的默认值,但由于类上的条件注释,当我扩展WebMvcConfigurationSupport类时,它会阻止自动配置发生。
@Configuration @ConditionalOnWebApplication @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class }) @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) @Order(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter(DispatcherServletAutoConfiguration.class) public class WebMvcAutoConfiguration {...}
是否要加载WebMvcAutoConfiguration类而不必实际复制/粘贴该类中的大多数代码?
或者是否可以从其他地方调用RequestMappingHandlerMapping setOrder()和setRemoveSemicolonContent(),这样我就可以使用@EnableWebMvc注释并运行自动配置类而没有任何问题?
提前致谢!
您的分析是正确的( @EnableWebMvc
或直接扩展WebMvcConfigurationSupport
将关闭WebMvcAutoConfiguration
)。 我不确定替代方案是什么,因为a)我们需要autoconfig的“get-out”子句,以及b)我不认为Spring喜欢在同一个上下文中有两个WebMvcConfigurationSupports
。 很高兴在github上讨论,如果你想尝试找到一种方法来改变它(可能有一些中间立场)。
我设法自定义RequestMappingHandlerMapping
同时使用BeanPostProcessor保持WebMvcAutoConfiguration
:
@Configuration public class RequestMappingConfiguration { @Bean public RequestMappingHandlerMappingPostProcessor requestMappingHandlerMappingPostProcessor() { return new RequestMappingHandlerMappingPostProcessor(); } public static class RequestMappingHandlerMappingPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof RequestMappingHandlerMapping) { ((RequestMappingHandlerMapping) bean).setUseSuffixPatternMatch(false); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } } }
如果Spring Boot提供了更好的方法来解决这个问题,我会很高兴…也许可以围绕PathMatchConfigurer
做些什么?
从DelegatingWebMvcConfiguration
而不是WebMvcConfigurationSupport
扩展,它不会阻止autoconfig发生:
@Configuration public class WebConfig extends DelegatingWebMvcConfiguration { @Override public RequestMappingHandlerMapping requestMappingHandlerMapping() { RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping(); handlerMapping.setRemoveSemicolonContent(false); handlerMapping.setOrder(1); return handlerMapping; } }
我认为现在在Spring Boot中执行此操作的最佳方法是将WebMvcRegistrations
组件添加到您的上下文中 – 此问题在您的问题时不存在(自Spring Boot 1.4.0以来一直可用)。
- Hibernate(JPA)inheritance抽象超类的映射
- 在开发环境中,在tomcat中重新加载webapp的简单快捷方法是什么?
- 如何正确使用SwingWorker上的publish()和process()方法?
- 为什么我不能在jdk9 win10中运行struts2.5.13
- JavaFX在多个页面上打印tableview
- 深度优先搜索二维arrays
- JPanel添加但没有“及时”显示
- 用于将整个存档解压缩到java中的目录的实用程序
- NamedEntityGraph – JPA / Hibernate抛出org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包