java - 使用JERSEY和JACKSON解析未知结构的POST请求

标签 java json rest jax-rs jersey-2.0

我目前的情况是,我有一个 REST 端点,它接受传入 JSON 消息的 POST。

问题是,我认为我无法指定 POJO 对象,以便 Jackson 可以将 JSON 编码到 POJO 对象中。原因是我无法控制到达该端点的内容,并且字段的数量和类型可能会随着时间的推移而改变,因此,预先定义 POJO 似乎不是一个选择。

所以我想问题是......我可以简单地告诉 jackson 不要进行任何编码并给出响应的字符串吗?我可以稍后使用 JSONObject-JSONArray 或 Gson 来处理这个问题。假设我有一个这样的方法:

@POST
@Path("/callback")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response facebookUpdate(String json) {
    //Do something with the json response...
}

如果这对于 Jersey-JAX 不可行...还有其他替代方案吗?

谢谢! 亚历杭德罗

最佳答案

最简单的方法就是不将 json 注入(inject)到方法中,而是使用请求对象:

public Response facebookUpdate(@Context request) {
    try(InputStream is=request.getEntityInputStream()) {
       ...
    }
}

然后,您可以从请求中获取请求的输入流并以您喜欢的方式解析它。

对于解析我可以推荐我自己的 jsonj库,它是专门为支持您所描述的开放式场景而编写的,并使用 jackson 反序列化为 java.util.Map 和 java.util.List 的高度定制的实现。 Gson 也是一个非常可靠的选择。

如果您想在应用程序范围内执行此操作,您可以编写自己的 @Provider 并在那里执行相同的操作。这就是我目前实际使用我的图书馆的方式。

关于java - 使用JERSEY和JACKSON解析未知结构的POST请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26919156/

相关文章:

rest - Azure Analysis Services 通过 REST API 横向扩展

java - Java中如何运行策略权限的小程序读取MAC地址

ios - 使用 Alamofire 将 JSON 对象作为 post 参数发送

java - 使用 Spring boot 将 RESTful 服务部署到 AWS

javascript - 我如何使用 javascript 将对象添加到这个 json 示例中?

ios - "Ambiguous use of subscript"新 Swift 更新后出错

rest - PayPal REST API - 如何获取 API 凭据?

带有 MediaTracker、线程和计时器的 Java 动画小程序

java - 如何在 Java 中将 n 列导出为 PDF 的标题?

java - 如何使 war 中的变量从 TomCat 接收参数?