使用JERSEY和JACKSON解析具有未知结构的POST请求

时间:2014-11-13 21:54:38

标签: java json rest jax-rs jersey-2.0

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

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

所以我想问题是......我可以简单地告诉杰克逊不做任何编组并给出响应的字符串吗?我可以稍后用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不可行......还有其他选择吗?

谢谢! 亚历

2 个答案:

答案 0 :(得分:1)

最简单的方法是不将json注入方法并改为使用请求对象:

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

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

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

如果你想在这个应用程序范围内进行,你可以编写自己的@Provider并在那里做同样的事情。这就是我目前实际使用我的库的方式。

答案 1 :(得分:0)

如果您了解Json格式的数据结构,请尝试使用JAXB,它完全适用于此。您可以创建一个带注释的简单类,然后可以使用对象而不是字符串。