2016-09-07 14 views
0

のためのエンティティとしてJsonObjectを使用して:私は、Javaに新しいです私はこの単純なコード持っジャージー2応答

package com.example 

import javax.json.Json; 
import javax.json.JsonObject; 

... 

@Path("/") 
public class Resource { 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response defaultEntry() { 
     JsonObject result = (Json.createObjectBuilder() 
          .add("hello", "world") 
          .build()); 

     return Response.status(200).entity(result.toString()).build(); 
    } 
} 

を、誰かが(私はresult.toString()への呼び出しを省略した場合、理由を説明すると、単に.entityresultを渡してください可能性そのよう:return Response.status(200).entity(result).build())、私は私が期待したものなどの情報を入力し、ではなく含むクライアント上でJSONを取得:

{"hello":{"chars":"world","string":"world","valueType":"STRING"}} 

これの意図は何ですか? JsonObjectを文字列を渡すとどうやって渡すのですか?

また、Response.entityメソッドがドキュメント(https://jersey.java.net/apidocs/2.11/jersey/javax/ws/rs/core/Response.html)に見つかりませんでした。私はチュートリアルからこのコードをコピーしましたが、これは何が起こっているのかを正しく説明していませんでした...

+0

あなたは何を期待していますか?値のみ? –

+0

使用しているJSONシリアライザを知っていますか? Moxy、Jackson、Gsonなど...? –

+0

私は '{" hello ":" world "}'を期待しています。私はどのシリアライザを使用しているのかわかりません。見つける方法? – akonsu

答えて

0

私はあなたに良い答えがありました。これはより良い答えが到着するまでのヒントです。ここにはいくつかの可動部分があります。 JsonObjectはインタフェースです。その実装については説明しません。さらに、返されたオブジェクトをJsonテキストに変換するJsonシリアライザがあります。これらの両方が一緒になって、このJsonスキーマ出力につながります。 .toString()のバリエーションを実行したとき、シリアライザはそのままストリングを返しました。しかし、JsonObjectを返すと、JsonObjectの実装とシリアライザの実装の2つのダイナミクスが実現します。 Jersey 2.0を使用しているので、Jackson、Moxy、またはJettisonシリアライザを使用している可能性があります。これらはすべてJsonObjectをシリアル化するときに異なる出力を持つことがありますが、確実にテストする必要があります。さらに、JsonObjectの実装は、選択したシリアライザで直列化すると、Jsonスキーマとなる出力を通常のJsonと比較して出力するように設定できます。これは、選択したJsonシリアライザに固有の注釈を使用して行うことができます。

私のキャリアでは、複数のJsonシリアライザを使用しました。ジャクソンはおそらくそこで最も人気のあるものです。しかし、私もGsonを広範囲に使用しました。あるプロジェクトでは、GsonをPOJOをシリアライズするときに、シリアライズされたJson出力がJsonスキーマとして出力されるように設定しました。そのため、特定の条件下でJsonシリアライザがJsonスキーマを出力するまでには至りませんでした。

POJO(別名Java Beans)をシリアライズするとき、Java Beanでシリアライザのデフォルト設定を使用すると、通常のJson出力が必要になります。しかし、特定のJsonシリアライザと複雑なインターワークを持つ可能性のあるオブジェクトを返送すると、Json出力が変化する可能性があります。

このような状況では、何が起こっているかを詳しく調べるためにテストを実行する必要があります。たとえば、作成したJsonObjectと一致するPOJOに対してシリアライザをまずテストします。次に、同じJsonObjectで他のJsonシリアライザもテストします。あなたがパターンを拾うことができるかどうかを見てください。

関連する問題