5

JSON をクライアントに返す JAX-RS Web サービスを作成しており、org.codehaus.jacksonライブラリを使用して JSON オブジェクトを処理しようとしています。私が抱えている問題はJsonNode、クライアントに返される前に適切にシリアル化されていないことです。応答には無関係なプロパティがたくさんあります。の最も単純な JSON 表現JsonNodeが返されることを望みます。

これが(不自然な)例です:

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

これからの 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}

私はそれが単純であることを好むだろう

{"user":"jDoe"}

何か不足していますか?単純な JsonNode を JSON にシリアル化する際に問題が発生する理由がわかりません。

それだけの価値があるためJSONObject、JSON4J ライブラリから a を返すことは期待どおりに機能しますが、Jackson のライブラリを使用することをお勧めします。

4

1 に答える 1

3

これはそのまま動作するはずなので、バージョンの非互換性があるのではないかと疑っています。Jersey は Jackson 1.x (1.8 または 1.9) を使用するため、同じバージョンを使用する必要があります。2.0 クラスは、1.x と 2.x が共存できるように (強制的なアップグレードを避けるため)、異なる Java パッケージに含まれています。

したがって、Jersey と同じバージョンを使用していることを確認してください。

于 2012-09-27T00:11:56.250 に答える