ses*_*ses 9 java xml json jaxb jersey
这是一项Jersey服务:
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response service(@QueryParam("format") String format) {
if (format.equals("json")) {...}
return response;
}
Run Code Online (Sandbox Code Playgroud)
我想根据url param "format" 生成XML或JSON回复.
我的回复实例正在形成jaxb2
我知道如果在我的Java客户端/功能测试中使用此代码,我可能会得到xml或json回复:
String content = service.path("").queryParam("myparam", "myvalue").accept(MediaType.APPLICATION_XML).get(String.class);
Run Code Online (Sandbox Code Playgroud)
要么
String content = service.path("").queryParam("myparam", "myvalue").accept(MediaType.APPLICATION_JSON).get(String.class);
Run Code Online (Sandbox Code Playgroud)
但我需要根据url param这样做.
use*_*600 13
这不是你想做的事情的正确方法.您不应使用查询参数来确定输出格式.您已声明您的资源方法同时生成XML和JSON,标准兼容的方法是让客户端发送正确的HTTP"Accept"标头,该标头声明它们能够使用哪种媒体类型.如果他们发送"Accept:application/json",您的JAX-RS实现应该选择将方法的响应格式化为JSON,如果客户端发送"Accept:application/xml",它应该自动将响应格式化为XML.如果客户端表明他们可以接受,那么您的JAX-RS实现可以自由选择,您也不应该关心.如果客户端表明他们也不能接受,那么您的JAX-RS应该发回适当的HTTP错误代码,表明他们没有办法发回适当的响应.
您可以直接通过Response#ok(假设您要返回HTTP 200状态)方法设置响应实体的媒体类型
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response service(@QueryParam("format") String format) {
return Response
// Set the status, entity and media type of the response.
.ok(entity, "json".equals(format) ? MediaType.APPLICATION_JSON : MediaType.APPLICATION_XML)
.build();
}
Run Code Online (Sandbox Code Playgroud)
或使用Response.ResponseBuilder#header方法
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response service(@QueryParam("format") String format) {
return Response
// Set the status and Put your entity here.
.ok(entity)
// Add the Content-Type header to tell Jersey which format it should marshall the entity into.
.header(HttpHeaders.CONTENT_TYPE, "json".equals(format) ? MediaType.APPLICATION_JSON : MediaType.APPLICATION_XML)
.build();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19549 次 |
| 最近记录: |