2012-12-04 35 views
5

tôi đã là một trường hợp sử dụng, nơi nó có vẻ thích hợp hơn để sử dụng JSONView chú thích với các thông tin loại trừ, ví dụ:JSONView chú thích có bao gồm/loại trừ thuộc tính

@JSONView(Views.Report1.class, include=false) 

Đây không phải là (bao gồm thuộc tính) được hỗ trợ trực tiếp ở Jackson (1.9.2) như bây giờ, tôi tự hỏi là có một cách giải quyết dễ dàng ở Jackson để đạt được điều này.

Sử dụng trường hợp:

  • Report1: Quan điểm này nên có id, name, info1, info2, info3, info4 thuộc tính
  • Report2: Quan điểm này nên có id, name, info1, info2, info4 thuộc tính
  • báo cáo [3 ..] Nói nhiều quan điểm khác có thể xảy ra
 
private int id; 
    private String name; 
    private String info1; 
    private String info2; 
    //ignore if view=report2 
    @JsonView(ReportViews.Report2.class , include=false) 
    private String info3; 
    private String info4; 

Trường hợp sử dụng của tôi không bao gồm các thuộc tính dựa trên các khung nhìn (hoặc nói các id báo cáo). Với phương thức JSONView, tôi cần thêm tất cả các khung nhìn vào thuộc tính info3 ngoại trừ Report2 để loại trừ nó. Không phù hợp.

Phương pháp tiếp cận chính xác trong trường hợp này là gì? JSONView được tùy chỉnh ngoại trừ loại trừ/bao gồm sẽ là giải pháp đúng nếu không có thứ gì đó tương tự đã có sẵn.

Trả lời

1

Chức năng Chế độ xem JSON của Jackson dựa trên tiêu chí để đưa vào, do đó bạn không thể thay đổi chú thích hiện có.

2

Dường như không có cách nào để loại trừ các trường khỏi một chế độ xem cụ thể theo cách đó.

Tuy nhiên, bạn có thể cấu trúc chế độ xem của mình rất linh hoạt bằng cách sử dụng giao diện để soạn chế độ xem từ các yếu tố cần thiết.

Trong trường hợp trên, chúng tôi sẽ cố gắng này:

public class ReportViews { 
    public interface NeedsInfo3 {}; 

    public static class Report1 implements NeedsInfo3 {}; 
    public static class Report2 {}; 
} 

Sau đó, trong mô hình của bạn sử dụng giao diện lĩnh vực cụ thể.

private int id; 
private String name; 
private String info1; 
private String info2; 

@JsonView(ReportViews.NeedsInfo3.class) 
private String info3; 
private String info4; 
+0

Cảm ơn, loại trừ quyền không trực tiếp có thể, cuối cùng tôi đã mở rộng chức năng 'Jackson' để hỗ trợ chú thích tùy chỉnh của tôi, một trường hợp sử dụng mẫu giống như:' @ReportView (perms = {Permission.ShowX, Permission. ShowY, ..}, anyPerm = false | true, conditions = "reflectConditionMethod", include = false | true) ' – harsh

Các vấn đề liên quan