JAX-RS Jersey - 如何强制响应ContentType?覆盖内容协商

时间:2010-09-09 13:37:30

标签: jersey jax-rs

Jersey通过查看accept标头来识别请求。我有一个只接受text / *的请求 - 我如何强制响应为例如application / json?

@POST
@Path("/create")
@Produces(MediaType.APPLICATION_JSON)
public MyResponseObject create() {
    return new MyResponseObject();
}

如果请求被指向创建只接受text / * jersey将返回500.有没有办法解决这个问题? (我无法更改请求接受标头)。

2 个答案:

答案 0 :(得分:5)

Jersey还通过ResourceConfig属性PROPERTY_MEDIA_TYPE_MAPPINGS支持此功能,您可以在web.xml中配置,也可以通过Jersey API以编程方式配置,如下所示:

 DefaultResourceConfig rc = new DefaultResourceConfig(MyResource.class);
 rc.getMediaTypeMappings().put("json", MediaType.APPLICATION_JSON_TYPE);
 rc.getMediaTypeMappings().put("xml", MediaType.APPLICATION_XML_TYPE);
 SimpleServerFactory.create("http://localhost:9090", rc);

您可以通过将.json或.xml后缀添加到您的网址来强制进行内容类型协商。

答案 1 :(得分:4)

我通过使用servlet过滤器解决了这个问题:

http://www.zienit.nl/blog/2010/01/rest/control-jax-rs-content-negotiation-with-filters