我想知道是否有办法在服务器端为传入请求设置“Accept”标头。
这可以通过实现和注册@prematching ContainerRequestFilter在Jersey 2.x中完成,但我还没有找到在Jersey 1.x版本中实现相同的方法。
我们的想法是设置一个“Accept”标题,该标题由资源方法上的“@Produces”注释理解。我正在尝试处理客户端无法设置“Accept”标头的用例。所以他指定了他期望作为查询参数的响应类型,例如“type = json”。我们的想法是优先在过滤器中读取提供的类型查询参数,并在调用带有'@Produces'注释的资源方法之前更新“Accept”标头。
如果有办法实现这一点,请告诉我。
致以最诚挚的问候,
答案 0 :(得分:0)
我认为执行此操作的首选方法是使用网址扩展名。
http://example.org/resource.xml
将返回XML。
http://example.org/resource.json
将返回JSON。
这可以通过自定义PackagesResourceConfig
来实现,告诉Jersey如何将扩展名映射到媒体类型:
public class ExampleResourceConfig extends PackagesResourceConfig {
public ExampleResourceConfig(Map<String, Object> props) {
super(props);
}
public ExampleResourceConfig(String... packages) {
super(packages);
}
@Override
public Map<String, MediaType> getMediaTypeMappings() {
Map<String, MediaType> map = newHashMap();
map.put("xml", MediaType.APPLICATION_XML_TYPE);
map.put("json", MediaType.APPLICATION_JSON_TYPE);
return map;
}
}
如果您使用web.xml
配置Jersey,则可以将javax.ws.rs.Application
属性设置为PackagesResourceConfig
类名称。