ETag suport が欲しいです。この目的のために、すべての作業を行うShallowEtagHeaderFilter
があります。 web.xml
で宣言せずに追加するにはどうすればよいですか(実際には存在しません。これまでのところ何とかしてそれができたためです)。
追伸Spring Boot 1.1.4を使用しています
P.P.S.完全なソリューションはこちら
package cuenation.api;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.ShallowEtagHeaderFilter;
import javax.servlet.DispatcherType;
import Java.util.EnumSet;
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean shallowEtagHeaderFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new ShallowEtagHeaderFilter());
registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
registration.addUrlPatterns("/cue-categories");
return registration;
}
}
リファレンスドキュメントに記載 のように、必要な唯一の手順は、そのフィルターを構成クラスのBeanとして宣言することです。
@Configuration
public class WebConfig {
@Bean
public Filter shallowEtagHeaderFilter() {
return new ShallowEtagHeaderFilter();
}
}
おそらく既にWebApplicationInitializer
を拡張しているでしょう。そうでない場合、webapp構成をweb.xml
ファイルをWebApplicationInitializer
クラスに。
コンテキスト構成がXMLファイルにある場合、AbstractDispatcherServletInitializer
を拡張するクラスを作成できます-構成クラスを使用する場合、AbstractAnnotationConfigDispatcherServletInitializer
が適切な選択です。
いずれの場合でも、フィルター登録を追加できます。
@Override
protected Filter[] getServletFilters() {
return new Filter[] {
new ShallowEtagHeaderFilter();
};
}
少し遅い答え。
私の解決策は、カスタムアノテーションを作成することでした。
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;
// ...
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface Filter {
@AliasFor(annotation = Component.class, attribute = "value")
String value() default "";
}
そして、それを単純にフィルター実装に適用します:
@Filter
public class CustomFilter extends AbstractRequestLoggingFilter {
@Override
protected void beforeRequest(HttpServletRequest request, String message) {
logger.debug("before req params:", request.getParameterMap());
}
@Override
protected void afterRequest(HttpServletRequest request, String message) {
logger.debug("after req params:", request.getParameterMap());
}
}
続きを見る: - @AliasFor
、 カスタムアノテーションの質問を春