2012-10-25 17 views
20

Câu hỏi khá đơn giản. Tôi đang sử dụng Jersey để xây dựng một hệ thống REST. Nếu tôi có một lớp với một giá trị mà tôi cần phải sử dụng trong quá trình xử lý nhưng không muốn gửi như một phần của đầu ra XML hoặc JSON khi lớp được sắp xếp lại, có cách nào để bỏ qua nó không? Một cái gì đó như:Có thể sử dụng chú thích Jersey/JAX-RS để bỏ qua một thành viên lớp khi marshalling thành XML/JSON không?

@XmlRootElement(name="example") 
class Example { 
    private int a; 
    private String b; 
    private Object c; 

    @XmlElement(ignore=true) 
    public int getA() { return a; } 
    @XmlElement 
    public String getB() { return b; } 
    @Ignore 
    public Object getC() { return c; } 
    ... //setters, constructors, etc. 
} 

Tôi hy vọng rằng một cái gì đó giống như ignore=true qua getA() hoặc @Ignore qua getC() sẽ làm việc, nhưng tôi có thể tìm thấy không có tài liệu hướng dẫn.

Trả lời

32

Có vài tùy chọn tùy thuộc vào số lượng trường/thuộc tính bạn muốn bỏ qua.

Option # 1 - @XmlTransient

Nếu bạn muốn ít hơn một nửa trong số các thuộc tính sẽ bị loại bỏ sau đó tôi muốn giới thiệu chú thích chúng với @XmlTransient. Điều này sẽ loại trừ chúng khỏi ánh xạ XML.

@XmlRootElement 
class Example { 
    private int a; 
    private String b; 
    private Object c; 

    @XmlTransient 
    public int getA() { return a; } // UNMAPPED 

    public String getB() { return b; } // MAPPED 

    @XmlTransient  
    public Object getC() { return c; } // UNMAPPED 

    ... //setters, constructors, etc. 
} 

Option # 2 - @XmlAccessorType(XmlAccessType.NONE)

Nếu bạn muốn có nhiều hơn một nửa trong số các thuộc tính phớt lờ tôi sẽ khuyên bạn sử dụng các @XmlAccessorType chú thích ở cấp loại thiết XmlAccessType.NONE. Điều này sẽ chỉ tạo các thuộc tính được chú thích để ánh xạ tới XML.

@XmlRootElement 
@XmlAccessorType(XmlAccessType.NONE) 
class Example { 
    private int a; 
    private String b; 
    private Object c; 

    public int getA() { return a; } // UNMAPPED 

    @XmlElement 
    public String getB() { return b; } // MAPPED 

    public Object getC() { return c; } // UNMAPPED 

    ... //setters, constructors, etc. 
} 

Để biết thêm thông tin

+1

đẹp! Cám ơn rất nhiều. –

+1

Cảm ơn bạn đã làm cho ngày của tôi –