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

Ken*_*ows 21 jax-rs jaxb jersey

非常直截了当的问题.我正在使用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.
}
Run Code Online (Sandbox Code Playgroud)

我希望像ignore=trueover getA()@Ignoreover 这样的东西getC()能起作用,但我找不到任何文档.

bdo*_*han 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.
}
Run Code Online (Sandbox Code Playgroud)

选项#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.
}
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息