为什么这个字段没有被序列化?

时间:2013-04-23 05:18:00

标签: java rest jax-ws jax-rs

我的Issue实体是从包含多个字段(id等等)的数据库表创建的。每个问题都有一个字段列表,它存储在一个单独的数据库表中。文章有一个int issueID字段,用于将它们映射到相应的问题(issues表中没有相应的列):最后,当构建一个Issue对象时,我将去让它拉出其issID与其ID匹配的所有文章,以便我可以返回包含问题数据的单个序列化对象以及表示其文章列表的JSONArray。

此时,我只是在做一些测试 - 创建一些虚拟文章对象并将它们添加到文章集合中。问题是,当我在Issue对象上测试GET请求时,返回的JSONObject只包含存储在数据库中的字段(id等等) - 没有Article集合的标志。这是为什么?

我同样有兴趣了解您需要看到的其他代码来回答这个问题:我刚刚开始自学如何编写Web服务,并且仍处于围绕广泛概念的阶段,因此,弄清楚哪些运动部件会影响哪些行为 - 以及哪些注释需要在哪里 - 最终是我要做的。

在这种情况下,欢迎基于更广泛的建议。

@Entity
@Table(name = "issues")
@XmlRootElement
public class Issue implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id")
    private Integer id;
    ....//other fields 
    @OneToMany(mappedBy = "issueID")
    private Collection<Articles> articlesCollection;

    public Issue() {
    articlesCollection = new ArrayList<Articles>();
    Articles a = new Articles();
    a.setHeadline("butt cheese");
    articlesCollection.add(a);
    Articles b = new Articles();        
    articlesCollection.add(b);
    Articles c = new Articles();        
    articlesCollection.add(c);
            }

2 个答案:

答案 0 :(得分:0)

默认情况下,关系初始化是惰性的,因此当加载Issue对象时,除非使用,否则不会获取articlesCollection

在你的情况下似乎情况相同。

如果您不打算明确加载articlesCollection,请浏览OpenEntityManagerInViewFilter。当您的对象序列化后,如果您已配置articlesCollection,则会加载OpenEntityManagerInViewFilter

答案 1 :(得分:0)

您的文章类也有@XmlType或@XMLRootElement标记吗? 像List<T> jaxb这样的Onany泛型类希望T注释为@XMLType@XMLRootElelemt