ジャクソンを使用してJSONレスポンスをDTOにデシリアライズします。与えられた応答のためにJSONを逆シリアル化する必要があるフィールドを持たないオブジェクトはスキップしますか?
:あなたが見ることができます
[ {
foo : "bar",
value : "hello world"
},
{
foo : "bar",
value : "hello world"
},
{
foo : "bar",
value : "hello world"
},
{
foo : "bar",
} ]
その全てこの配列内のオブジェクトが、そのうちの一つは、スキーマ(最後の1)で矛盾しています。
StackOverflowの上のいくつかの他の関連する質問を見た後:
deserializing json using jackson with missing fields
Ignore null fields when DEserializing JSON with Gson or Jackson
彼らはまだその不規則なJSONオブジェクトからオブジェクトを作成します。
これは、このリストを繰り返し処理し、クリーニングメソッドを実装して属性 "value"を持たないオブジェクトを削除する必要があることを意味します。
私が知りたいことは、ジャクソンが私にとってこのビジネスロジックを実行できるかどうかです。
If this JSON object has all the required fields
Then create a new DTO
Else
Skip to next JSON object in response
ジャクソン注釈付き
マイDTO
:3つのDTOである与えられたJSONレスポンスから結果と@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public final class FooDTO {
private final String foo;
private final String value;
/**
* Constructor
*
* @param foo String
* @param value String
*/
@JsonCreator
public FooDTO(@JsonProperty("foo") final String foo, @JsonProperty("value") final String value) {
this.foo = checkNotNull(foo, "foo required");
this.value = value;
}
@JsonProperty("foo")
public void setFoo(final String foo) {
this.foo = foo;
}
/**
* @return String
*/
public String foo() {
return foo;
}
etc...
ではなく、たぶん4
http://stackoverflow.com/a/37722790/4969140これはあなたのニーズを満たしていますか? –
これは私の意見ですが、このロジックを直列化ライブラリに入れるべきではないと思います。データを公開しているエンドポイントを見ると、チャンク全体が透過的に省略されることは不明です。 –
私は、@JonPetersonを延期するためにベッド。このロジックがシリアライゼーション(入力の受領)フェーズに属している理由は少なくとも2つあります.1)これは古典的な入力検証ルールのようで、すぐに検出して破棄(または何らかの方法で処理)する必要があります。可能な限り2)パフォーマンス上の考慮事項。パーサーはすでにjson配列を反復しています。あなたの提案は、入力検証のためにメモリ内で2回目の反復を追加します。 –