2013-09-06 40 views
6

tôi có một đối tượng Một với một số phương pháp ma, mb, mc và đối tượng này thực hiện một giao diện B với chỉ mamb.Jackson serialize chỉ phương pháp giao diện

Khi tôi serialize B Tôi hy vọng chỉ mamb như một phản ứng json nhưng tôi nhận được cũng mc.

Tôi muốn tự động hóa hành vi này để tất cả các lớp tôi sắp xếp theo thứ tự được đăng trên cơ sở giao diện chứ không phải trên thực thi.

Tôi nên làm như thế nào?

Ví dụ:

public interface Interf { 
    public boolean isNo(); 

    public int getCountI(); 

    public long getLonGuis(); 
} 

Thực hiện:

public class Impl implements Interf { 

    private final String patata = "Patata"; 

    private final Integer count = 231321; 

    private final Boolean yes = true; 

    private final boolean no = false; 

    private final int countI = 23; 

    private final long lonGuis = 4324523423423423432L; 

    public String getPatata() { 
     return patata; 
    } 


    public Integer getCount() { 
     return count; 
    } 


    public Boolean getYes() { 
     return yes; 
    } 


    public boolean isNo() { 
     return no; 
    } 


    public int getCountI() { 
     return countI; 
    } 

    public long getLonGuis() { 
     return lonGuis; 
    } 

} 

serialization:

ObjectMapper mapper = new ObjectMapper(); 

    Interf interf = new Impl(); 
    String str = mapper.writeValueAsString(interf); 

    System.out.println(str); 

đáp ứng:

{ 
    "patata": "Patata", 
    "count": 231321, 
    "yes": true, 
    "no": false, 
    "countI": 23, 
    "lonGuis": 4324523423423423500 
} 

Phản hồi dự kiến:

{ 
    "no": false, 
    "countI": 23, 
    "lonGuis": 4324523423423423500 
} 
+0

vấn đề tương tự: [http://stackoverflow.com/questions/8922309/serialize-class-based-on-one-interface-it-implements-with-jackson-or-gson][1] [1]: http://stackoverflow.com/questions/8922309/serialize-class-based-on-one-interface-it-implements-with-jackson-or-gson – Farid

Trả lời

7

Chỉ chú thích giao diện của bạn để Jackson tạo trường dữ liệu theo lớp của giao diện chứ không phải lớp của đối tượng bên dưới.

@JsonSerialize(as=Interf.class) 
public interface Interf { 
    public boolean isNo(); 
    public int getCountI(); 
    public long getLonGuis(); 
} 
+0

gì nếu tôi có nhiều giao diện cho lớp impl của tôi và tôi muốn tuần tự hóa đối tượng theo các getters được định nghĩa trong các giao diện. – varun

+0

Tôi muốn trả lại các giao diện khác nhau từ các dịch vụ khác nhau. – varun

+0

@varun bạn có lẽ nên thiết lập các điểm cuối khác nhau để trả về các cấu trúc dữ liệu khác nhau. Đó là, getFoo() trả về giao diện Foo và getBar() trả về giao diện Bar, trong đó Foo và Bar có cùng lớp impl bên dưới. –

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