ロンボクの@Builder
は、直接的な問題ではありません。なぜなら、ジャクソンはそれを逆シリアル化に使用しないからです。しかし、Jacksonはオブジェクトのインスタンス化のために利用可能であれば、デフォルト以外のコンストラクタをargsとともに使用しています。それ以外の場合は、非argコンストラクタを使用しています。
public ResponsePOJO(List<Object> list1, List<Object> list2, List<Object> list3, List<Object> list4) {
this.list1 = list1;
this.list2 = list2;
this.list3 = list3;
this.list4 = list4;
}
そして、このコンストラクタが呼び出されたときに、あなたのデフォルト値は破棄され、null
をJSONで存在しないフィールドに割り当てられている:あなたはResponsePOJO
に@AllArgsConstructor
を使用すると、ジャクソンはこのようになります作成したコンストラクタをとります。
@Builder
は、すべての引数のコンストラクタが必要ですが、あなたはこの問題を解決するには、いくつかの方法があります:
@Builder
を使用して@AllArgsConstructor
を削除しない - 時にはあなたはこれらのいずれかを必要としないかもしれないが、それはあなたのケース に依存し
@AllArgsConstructor
を削除して、すべての引数コンストラクタを内部ではなく、引数なしのカスタムビルダーを作成します。
使用@Builder
とすべての引数は、これと同じコンストラクタカスタム作成:
public ResponsePOJO(List<Object> list1, List<Object> list2, List<Object> list3, List<Object> list4) {
this.list1 = list1 == null ? Lists.newArrayList() : list1;
this.list2 = list2 == null ? Lists.newArrayList() : list2;
this.list3 = list3 == null ? Lists.newArrayList() : list3;
this.list4 = list4 == null ? Lists.newArrayList() : list4;
}
ここでジャクソンはまだ上記のすべての引数のコンストラクタを呼び出しますが、いくつかのフィールドが存在しないか、存在し、nullでいない場合(これは持っていること場合によってはヌル値(nullityに対する検証など)が期待できる場合は、ビジネスロジックへのダウンストリームの影響がありますが、常に空のリストが割り当てられます。
んLists.newArrayListは、配列リストの新しいインスタンスを作成し、より多くの情報例えばhere
見つけることができますか? –
修正。 'Lists.newArrayList()'は、グーグルグアバライブラリのメソッドです。私もロンボクで 'NoArgsConstructor'を削除しようとしました。すべてのフィールドを空のリストに初期化してもまだ動作しません。 –
クラスパスにguavaジャクソンバインディングモジュールがありますか? –