我使用Spring Boot。
我有一个使用RequestMappingHandlerMapping注入其中的类。
class Foo {
private final RequestMappingHandlerMapping mapping;
Foo(RequestMappingHandlerMapping mapping) {
this.mapping = mapping;
}
}
我有一个配置,将Foo和RequestMappingHandlerMapping作为bean进行吐出。
@Configuration
class Bar extends RepositoryRestMvcConfiguration {
@Bean
public Foo foo(){
return new Foo(requestMappingHandlerMapping());
}
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping(){
return new RequestMappingHandlerMapping();
}
}
最后我还有一个扩展WebMvcConfigurerAdapter的类。
@Configuration
class Baz extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(<some interceptor>).addPathPatterns(URL_PATTERN);
}
}
我注意到,由于RequestMappingHandlerMapping,我的拦截器 不 被注册。当我注释掉RequestMappingHandlerMapping或者当我更改Baz以便它扩展WebMvcConfigurationSupport时,我的拦截器被注册。
不确定是什么导致这种情况。因此,扩展WebMvcConfigurerAdapter的RepositoryRestMvcConfiguration的超类也没有注册。有人可以通过解释这种行为的原因来帮助我吗?
我还注意到,如果我将@EnableWebMvc放在拦截器注册的Baz类中,那么它会被注册。但不幸的是,对控制器的任何POST请求都返回415而不是201.我的控制器用@RestController注释并使用媒体类型hal + json。
答案 0 :(得分:0)
我能够解决由@EnableWebMv引起的部分问题导致POST返回415而不是201
@Configuration
class Baz extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(<some interceptor>).addPathPatterns(URL_PATTERN);
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>>converters) {
converters.add(new MappingJackson2HttpMessageConverter());
}
}
看起来现在一切都已到位:RequestMappingHandlerMapping被拾取并且拦截器也被正确注册。