如何在Jersey 1.x的服务器端为传入请求设置Accept标头

时间:2013-11-26 09:00:26

标签: java jersey

我想知道是否有办法在服务器端为传入请求设置“Accept”标头。

这可以通过实现和注册@prematching ContainerRequestFilter在Jersey 2.x中完成,但我还没有找到在Jersey 1.x版本中实现相同的方法。

我们的想法是设置一个“Accept”标题,该标题由资源方法上的“@Produces”注释理解。我正在尝试处理客户端无法设置“Accept”标头的用例。所以他指定了他期望作为查询参数的响应类型,例如“type = json”。我们的想法是优先在过滤器中读取提供的类型查询参数,并在调用带有'@Produces'注释的资源方法之前更新“Accept”标头。

如果有办法实现这一点,请告诉我。

致以最诚挚的问候,

1 个答案:

答案 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类名称。