Jersey通过查看accept标头来识别请求。我有一个只接受text / *的请求 - 我如何强制响应为例如application / json?
@POST
@Path("/create")
@Produces(MediaType.APPLICATION_JSON)
public MyResponseObject create() {
return new MyResponseObject();
}
如果请求被指向创建只接受text / * jersey将返回500.有没有办法解决这个问题? (我无法更改请求接受标头)。
答案 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