0

次の 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 があれば簡単です。

これを達成するためのより良い方法を見つけた人はいますか?

4

1 に答える 1