我目前的情况是我有一个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不可行......还有其他选择吗?
谢谢! 亚历
答案 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,它完全适用于此。您可以创建一个带注释的简单类,然后可以使用对象而不是字符串。