【问题标题】:Use @XmlTransient only in some cases仅在某些情况下使用 @XmlTransient
【发布时间】:2015-05-02 14:30:38
【问题描述】:

我有两个班级:

public class A implements Serializable {
    ...
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fieldID")
    private Collection<B> bCollection;
    ...
    public Collection<B> getBCollection()
    {
       return bCollection;
    }
    public void setBCollection(Collection<B> bCollection)
    {
       this.bCollection = bCollection;
    }
}

public class B implements Serializable {
    ...
    @JoinColumn(name = "aID", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private A aID;
    ...
    @XmlTransient
    public A getAID() {
       return aID;
    }
    public void setAID(A aID) {
       this.aID= aID;
    }
}

我一直在使用 A 类 - 它正在正常工作,但现在,我想在 RESTful GET 方法中使用 B 类。但是,当我尝试这样做时,@XmlTransient 阻止显示A 字段。当我使用B 类时,是否可以在A 类上使用@XmlTransient 并在我使用A 类时在B 类上使用它?

【问题讨论】:

    标签: java rest jax-rs xmltransient


    【解决方案1】:

    一个简单的解决方案是包含https://eclipse.org/eclipselink/moxy.php 并开始使用@XmlInverseReference 注释来实现双向依赖。 http://eclipse.org/eclipselink/api/2.2/org/eclipse/persistence/oxm/annotations/XmlInverseReference.html

    如果不可能,请提供更多信息,您正在使用哪种 JAXB/JAX-RS 实现,以便为您的问题提出一些更具体的解决方案。

    一般来说,这个想法是控制序列化过程并决定如何序列化某些对象/字段以及是否应该序列化这些对象/字段。例如,可以通过以下策略来实现:

    1. 当类 A 被序列化时,序列化类 B 不是作为一个整体对象,而是作为它的字符串表示。例如使用@XmlAttribute @XmlIDREF

    2. 通过设置例如某种过滤器/排除(取决于您的 JAX-RS 实现提供什么)来控制序列化过程:

          ExclusionStrategy() {
      
          public boolean shouldSkipClass(Class<?> clazz) {
              return (clazz == B.class);
          }
      
          /**
            * Custom field exclusion goes here
            */
          public boolean shouldSkipField(FieldAttributes f) {
              return false;
          }
      
       }
      

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 2020-06-20
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 2015-01-28
      相关资源
      最近更新 更多