2017-02-03 9 views
0

私はSpring Bootを使用しています。RequestMappingHandlerMappingとWebMvcConfigurerAdapter

私はそれに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を拡張するもう1つのクラスがあります。私は気づく何

@Configuration 
class Baz extends WebMvcConfigurerAdapter { 
    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(<some interceptor>).addPathPatterns(URL_PATTERN); 
    } 
} 

があるためRequestMappingHandlerMappingの、私のインターセプタがない登録を受けるということです。 RequestMappingHandlerMappingをコメントアウトするとき、またはBazを変更してWebMvcConfigurationSupportを拡張するときに、インターセプタが登録されます。

これを引き起こす可能性のあることはまったくわかりません。このため、WebMvcConfigurerAdapterを継承するRepositoryRestMvcConfigurationのスーパークラスも登録されません。誰かがこの行動の理由を説明することで私を助けることができますか?

インターセプターが登録されているBazクラスに@EnableWebMvcを置くと、登録されます。しかし残念なことに、コントローラへのPOST要求は、201ではなく415を返します。コントローラには@RestControllerという注釈が付けられ、hal + jsonというメディアタイプが使用されます。

+0

Springブートを使用していますか? – nowszy94

答えて

0

私はすべてが今の場所にあるように見えます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()); 
    } 
} 

の代わりに415を返すようにPOSTを引き起こし@EnableWebMvcによって引き起こされた問題の一部を解決することができました:RequestMappingHandlerMappingをピックアップしてきていますインターセプタも適切に登録されます。

関連する問題