java - jersey 如何检查请求的数据格式是什么?

标签 java web-services api rest jersey

我想知道如何检查客户端从 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/

相关文章:

java - 如何在 Java 中创建一个类的方法数组

java - 序列化和反序列化未实现 java.io.Serializable 的对象

javascript - 将 javascript 变量传递给 ruby​​ on rails Controller 以进一步发送 api

android - android中的web服务是什么?

java - 如何在 Java 中使用 JSON Web 服务

javascript - Angular.JS $http API 请求

api - 我是否应该信任使用 GET 方法进行用户身份验证的 API?

java - 反射中方法的参数数量未知

java - Windows 中非管理员权限所需文件的 Log4j 属性

java - setZone方法有问题吗?