クライアントにデータを送信するために JaxRS と Jackson を使用しています。クライアントは Javascript であるため、そのプロパティに有効な値がない場合 (JaxRS はデフォルトで送信します)、実際には null 値または空の配列を送信する必要はありません。これを回避する方法はありますか?
例。JaxRS はこれを送信します:
{"prop1":[],"prop2":null,"prop3":"foo"}
どこで逃げることができたのか
{"prop3":"foo"}
これを実現する方法は複数ありますが、次のようになります。注釈@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)は一方向です。または、空のリスト、配列も削除したいので、NON_NULL を NON_EMPTY に変更します。
これをデフォルトの動作として構成することもできます。ジャクソン1.9で:
mapper.setSerializationConfig(mapper.getSerializationConfig().withSerializationInclusion(
JsonSerialize.Inclusion.NON_EMPTY));
そしてJackson 2.0では、少し単純です:
mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY);
まず、JSON からプロパティを削除すると、クライアント側でエラーや不明確なコードが発生する可能性があります。クライアント側は、指定されたプロパティが存在するかどうかを使用する前に確認する必要があります。プロパティが欠落している場合は、JavaScript エラーが報告されます。退屈なもの。
HTTP 通信は gzip で圧縮されているため、プロパティを削除することによる潜在的な利点はそれほど大きくないように見えます (明らかに間違っている可能性があります - 私はあなたのアプリケーションを知りません)。GET リクエストは効果的にキャッシュできるため、このような最適化を避けるもう 1 つの理由があります。
必要に応じて、Java オブジェクトの JSON へのシリアル化をカスタマイズできます。この質問を参照してください。JAXB オブジェクトのリストのシリアル化を JSON にカスタマイズするにはどうすればよいですか? これを行う方法の詳細については。