在泽西岛2.15,我正在上课
public class MyMediaTypeFilter extends UriConnegFilter
(在我的web.xml中声明)返回与某些扩展名对应的内容类型(例如,当URL以“.html”结尾时返回html内容。)
这种做“基于文件扩展的内容协商”的方式似乎很常见(例如,在this question的接受答案中解释了)
我只是尝试升级到Jersey 2.22,我的代码不再编译,因为UriConnegFilter现在被宣布为final。
有简单的解决方法吗?
TIA
答案 0 :(得分:0)
回答我自己的问题(这很容易):
使用UriConneggilter实例作为属性,而不是扩展UriConnegFilter,实现ContainerRequestFilter接口:
@PreMatching
public class MediaTypeFilter implements ContainerRequestFilter {
private UriConnegFilter filter;
private static final Map<String, MediaType> mappedMediaTypes = new HashMap<String, MediaType>(4);
static {
mappedMediaTypes.put("html", MediaType.TEXT_HTML_TYPE);
...
}
public MediaTypeFilter() {
filter = new UriConnegFilter(mappedMediaTypes, null);
}
@Override public void filter(ContainerRequestContext requestContext) throws IOException {
filter.filter(requestContext);
}
}
答案 1 :(得分:0)
默认情况下,过滤器已注册。您需要做的就是提供带有映射的配置属性
Map<String, MediaType> mediaTypes = ...
resourceConfig.property(ServerProperties.MEDIA_TYPE_MAPPINGS, mediaTypes);
如果您使用的是web.xml(而不是ResourceConfig),则可以添加Feature
而不是
@Provider
public UrlConnegFeature implements Feature {
@Override
public boolean configure(FeatureContext ctx) {
Map<String, MediaType> mappings = ...
ctx.property(ServerProperties.MEDIA_TYPE_MAPPINGS, mappings);
}
}