我想知道如何检查客户端从 REST API 请求的数据
例如我有这样的API:
@POST
@Consumes({ MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }){
...some logic;
}
如果客户端有 header :
Accept: application/xml
我希望他得到与 header 中有 application/json 不同的响应。那么我可以做一些类似的事情
@POST
@Consumes({ MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}){
if ( mediaType.equals("APPLICATION_JSON"){ (its pseudo code)
blah blah blah};
}}
???
最佳答案
使用HeaderParam
annotation访问 Accept
header 的值。
@POST
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response myPostService(@HeaderParam("Accept") String accepted,
MyObject inTheRequestBody) {
MediaType mediaType = MediaType.APPLICATION_JSON; // the default
if(accepted != null) {
mediaType = MediaType.valueOf(accepted);
}
// service logic
return Response.ok().entity(/*the object you want to return*/).type(mediaType).build();
}
Jersey 只会为您处理序列化,只要它有相应的
MessageBodyReader
(对于请求主体)和
MessageBodyWriter
。如果没有,您可以随时注册自己的,Jersey 将调用它。
关于java - jersey 如何检查请求的数据格式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30394345/