【问题标题】:Is it possible using Jersey/JAX-RS annotations to skip a class member when marshalling to XML/JSON?编组为 XML/JSON 时是否可以使用 Jersey/JAX-RS 注释跳过类成员?
【发布时间】:2012-10-25 13:30:39
【问题描述】:

很简单的问题。我正在使用 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 over getA()@Ignore over getC() 这样的东西可以工作,但我找不到任何文档。

【问题讨论】:

    标签: jaxb jersey jax-rs


    【解决方案1】:

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

    选项 #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.
    }
    

    更多信息

    【讨论】:

    • 谢谢你让我开心
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多