次の JsonViews が定義されています。
public class EntityJsonView {
public static class Detailed extends Abbreviated {
}
public static class AuditedDetailed extends Detailed {
}
public static class Abbreviated {
}
}
次に、これらのクラスがあります。
public Class Customer {
@JsonView(EntityJsonView.Abbreviated.class)
private Integer id;
@JsonView(EntityJsonView.Abbreviated.class)
private String name;
@JsonView(EntityJsonView.Detailed.class)
private String phone;
@JsonView(EntityJsonView.Detailed.class)
private List<Invoice> invoices;
}
public Class Invoice {
@JsonView(EntityJsonView.Abbreviated.class)
private Integer id;
@JsonView(EntityJsonView.Detailed.class)
private Customer customer;
@JsonView(EntityJsonView.Detailed.class)
private Employee salesman;
@JsonView(EntityJsonView.Abbreviated.class)
private Date invoiceDate;
@JsonView(EntityJsonView.Abbreviated.class)
private Double amount;
}
次のように顧客リストを返します。
@JsonView(EntityJsonView.Detailed.class)
public ResponseEntity<List<Customer>> getCustomerList() {
List<Customer> custs = customerService.getAll();
return new ResponseEntity<List<Customer>>(custs , HttpStatus.OK);
}
詳細ビューを使用して Customer インスタンスをシリアル化する一方で、ネストされた Invoice インスタンスを省略ビューを使用してシリアル化する必要があります。同様に、詳細ビューを使用して請求書のリストをシリアル化するときに、ネストされた Customer インスタンスを簡略ビューを使用してシリアル化する必要があります。他にも削除したい属性がたくさんあるので、これは単なる再帰の問題ではありません。
ソリューションを高低で検索しましたが、適切なキーワードを使用していない可能性があります。
この仕事の私の前任者は @JsonIgnoreProperties を使用してこれを達成しましたが、それはメンテナンスの問題であることが証明されています。新しい属性がクラスに追加されると、すべての無視リストを調べて、無視する必要があるかどうかを判断する必要があります。対応する @JsonIncludeProperties があれば簡単です。
これを達成するためのより良い方法を見つけた人はいますか?