我定义了以下 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);
}
虽然我希望使用详细视图对客户实例进行序列化,但我希望使用缩写视图对嵌套的发票实例进行序列化。同样,当我使用详细视图序列化发票列表时,我希望使用缩写视图序列化嵌套的客户实例。这不仅仅是递归问题,因为我还想删除许多其他属性。
我已经到处搜索了解决方案,但也许我没有使用正确的关键字。
我的前任使用@JsonIgnoreProperties 完成了这项工作,但事实证明这是一个维护问题。当一个新属性被添加到一个类中时,我必须寻找所有的忽略列表并决定是否需要忽略它。如果有相应的@JsonIncludeProperties 会更容易。
有没有人找到更好的方法来实现这一点?