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

Joe*_*Joe 3 jax-rs jersey

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

@POST
@Path("/create")
@Produces(MediaType.APPLICATION_JSON)
public MyResponseObject create() {
    return new MyResponseObject();
}
Run Code Online (Sandbox Code Playgroud)

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

Aru*_*lan 5

Jersey还通过您可以在web.xml中配置的ResourceConfig属性PROPERTY_MEDIA_TYPE_MAPPINGS或通过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);
Run Code Online (Sandbox Code Playgroud)

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