在编组XML / JSON时,是否可以使用Jersey / JAX-RS注释跳过类成员?

时间:2012-10-25 13:30:40

标签: jaxb jersey jax-rs

非常直截了当的问题。我正在使用Jersey构建一个REST系统。如果我有一个具有值的类,我需要在处理期间使用但不希望在类被封送时作为XML或JSON输出的一部分发送,有没有办法忽略它?类似的东西:

@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.
}

我希望ignore=true超过getA()@Ignore超过getC()之类的东西可行,但我找不到文档。

1 个答案:

答案 0 :(得分:34)

根据您想要忽略的字段/属性数量,有几个选项。

选项#1 - @XmlTransient

如果你想要忽略不到一半的属性,那么我建议用@XmlTransient注释它们。这将把它们从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.
}

选项#2 - @XmlAccessorType(XmlAccessType.NONE)

如果您希望忽略超过一半的属性,我建议您在类型级别使用@XmlAccessorType注释来设置XmlAccessType.NONE。这将导致仅将带注释的属性映射到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.
}

了解更多信息