1

Spring RestTemplate と I18N を使用するときに単体テストを機能させようとしています。セットアップのすべてが、他のすべてのテスト ケースで正常に機能します。

私が読んだことに基づいて、これは私がJava Configに入れたものです:

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
    return new LocaleChangeInterceptor();
}

@Bean
public DefaultAnnotationHandlerMapping handlerMapping() {
    DefaultAnnotationHandlerMapping mapping = new DefaultAnnotationHandlerMapping();
    Object[] interceptors = new Object[1];
    interceptors[0] = new LocaleChangeInterceptor();
    mapping.setInterceptors(interceptors);
    return mapping;
}

@Bean
public AnnotationMethodHandlerAdapter handlerAdapter() {
    return new AnnotationMethodHandlerAdapter();
}

次に、RestTemplate を使用した場合、次のようになります。

    public MyEntity createMyEntity(MyEntity bean) {
    Locale locale = LocaleContextHolder.getLocale();
    String localeString = "";
    if (locale != Locale.getDefault()) {
        localeString = "?locale=" + locale.getLanguage();
    }
    HttpEntity<MyEntity> req = new HttpEntity<MyEntity>(bean);
    ResponseEntity<MyEntity> response = restTemplate.exchange(restEndpoint + "/url_path" + localeString, HttpMethod.POST, req, MyEntity.class);
    return response.getBody();
}

これは少しクリーンアップできますが、動作するはずですが、LocalChangeInterceptor が呼び出されることはありません。私は今これをデバッグしており、それを理解したらすぐに再度投稿します-しかし、これが私が失う競合状態であることを願っています-誰かが理由を知っていますか?

4

1 に答える 1

1

幸運で、このスレッドに出くわしました。メモの 1 つが私を正しい方向へと導きました。Java Config にこれらすべての Bean が必要なわけではありません。しかし、私と同じように @EnableWebMvc を使用しているが、言及するほど重要であるとは知らなかった場合、Java Config で行う必要があるのは次のとおりです。

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
    return new LocaleChangeInterceptor();
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LocaleChangeInterceptor());
    super.addInterceptors(registry);
}

インターセプター用の 1 つの Bean を追加してから、メソッドをオーバーライドしてインターセプターを追加します。ここで、構成クラス (@Configuration および @EnableWebMvc で注釈が付けられています) も WebMvcConfigurerAdapter を拡張します。これは一般的な使用方法です。

これは、少なくとも、私にとってはうまくいきました。それが他の誰かを助けることを願っています。

于 2012-10-10T18:45:38.357 に答える