【问题标题】:Why is this field not being serialized?为什么这个字段没有被序列化?
【发布时间】:2013-04-23 05:18:00
【问题描述】:

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

不过,此时我只是在做一些测试——创建一些虚拟的 Article 对象并将它们添加到文章集合中。问题是,当我在 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);
            }

【问题讨论】:

  • Articles序列化了吗?

标签: java rest jax-ws jax-rs


【解决方案1】:

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

你的情况似乎是一样的。

如果您不打算显式加载articlesCollection,请探索OpenEntityManagerInViewFilter。当您的对象序列化时,如果您配置了OpenEntityManagerInViewFilter,则将加载articlesCollection

【讨论】:

  • 嗯,但我不是通过实例化它并添加文章来“使用它”吗?还是“使用它”必须从数据库中反序列化它?另外 - 我将如何明确加载articlesCollection - 通过执行查询以从数据库中反序列化它?
  • 不确定该构造函数,但您是否检查过它是否被执行并且articlesCollection 是否已加载。还有你对问题对象做了什么,即它是如何被序列化的?
【解决方案2】:

您的文章类是否也有@XmlType 或@XMLRootElement 标记? 像List&lt;T&gt; jaxb 这样的任何泛型类都期望T@XMLType@XMLRootElelemt 注释

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多