Jackson 的 JsonNode 与 JAX-RS

Jak*_*ler 5 rest jax-rs jackson

我正在编写一个 JAX-RS Web 服务,它将 JSON 返回给客户端,并且我正在尝试使用这些org.codehaus.jackson库来处理 JSON 对象。我遇到的问题是我的数据JsonNode在返回给客户端之前没有得到正确的序列化。响应中有很多无关的属性。我希望JsonNode返回最简单的 JSON 表示形式。

这是一个(人为的)示例:

@GET
@Path("user")
@Produces(MediaType.APPLICATION_JSON)
public JsonNode getUser() {
    ObjectNode node = JsonNodeFactory.instance.objectNode();
    node.put("user", "jDoe");
    return node;
}
Run Code Online (Sandbox Code Playgroud)

这个 JSON 响应非常难看:

{"object":true,"elements":[{"textual":true,"textValue":"jDoe","binaryValue":"jDoe","valueAsText":"jDoe","valueNode":true,"containerNode":false,"missingNode":false,"array":false,"object":false,"pojo":false,"number":false,"integralNumber":false,"floatingPointNumber":false,"int":false,"long":false,"double":false,"bigDecimal":false,"bigInteger":false,"boolean":false,"null":false,"binary":false,"booleanValue":false,"intValue":0,"longValue":0,"doubleValue":0.0,"decimalValue":0,"bigIntegerValue":0,"valueAsInt":0,"valueAsLong":0,"valueAsDouble":0.0,"valueAsBoolean":false,"elements":[],"fieldNames":[],"fields":[]}],"fieldNames":["user"],"fields":[{"key":"user","value":{"textual":true,"textValue":"jDoe","binaryValue":"jDoe","valueAsText":"jDoe","valueNode":true,"containerNode":false,"missingNode":false,"array":false,"object":false,"pojo":false,"number":false,"integralNumber":false,"floatingPointNumber":false,"int":false,"long":false,"double":false,"bigDecimal":false,"bigInteger":false,"boolean":false,"null":false,"binary":false,"booleanValue":false,"intValue":0,"longValue":0,"doubleValue":0.0,"decimalValue":0,"bigIntegerValue":0,"valueAsInt":0,"valueAsLong":0,"valueAsDouble":0.0,"valueAsBoolean":false,"elements":[],"fieldNames":[],"fields":[]}}],"containerNode":true,"valueNode":false,"missingNode":false,"array":false,"pojo":false,"number":false,"integralNumber":false,"floatingPointNumber":false,"int":false,"long":false,"double":false,"bigDecimal":false,"bigInteger":false,"textual":false,"boolean":false,"null":false,"binary":false,"booleanValue":false,"intValue":0,"longValue":0,"doubleValue":0.0,"decimalValue":0,"bigIntegerValue":0,"valueAsInt":0,"valueAsLong":0,"valueAsDouble":0.0,"valueAsBoolean":false}
Run Code Online (Sandbox Code Playgroud)

我希望它是简单的

{"user":"jDoe"}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我不明白为什么将简单的 JsonNode 序列化为 JSON 会出现问题。

就其价值而言,JSONObject从 JSON4J 库返回 a 按预期工作,但我更喜欢使用 Jackson 的库。

Sta*_*Man 3

这应该按原样工作,所以我怀疑可能存在版本不兼容。由于 Jersey 使用 Jackson 1.x(1.8 或 1.9),因此您需要使用相同的版本;2.0 类位于不同的 Java 包中,以允许 1.x 和 2.x 共存(以避免强制升级)。

因此,请确保您使用与 Jersey 相同的版本。