【问题标题】:How to custom JSON output of relation OneToMany in JAX-RS如何在 JAX-RS 中自定义关系 OneToMany 的 JSON 输出
【发布时间】:2019-12-09 00:31:21
【问题描述】:

我正在使用 Jersey(JAX-RS) 构建一个 Rest 应用程序。目前,我想避免子数据获取父数据列表。由于子数据很大,在获取所有列表数据父数据时会使程序变得非常缓慢。目前,我使用 FetchType.EAGER,因为如果使用 FetchType.LAZY,我不知道如何实现(错误是 LazyInitializationException)。

Pojo 结构;

class Parent  {
    ..
    @OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, orphanRemoval="true")
    private List<Child> listOfChildren;

    ..
    }
class Child {
    ..
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "parentId")
    private Parent parent;
    ..
    }

在获取父数据列表时如何自定义忽略子数据,如下所示:

   [
        {
           "id": "0001",
           "name": "A",
           "listOfChildren":[
            // I want it is null because data is very big
           ]
        },
        {
            "id": "0002",
            "name": "B",
            "listOfChildren":[
             // I want it is null, because data is very big
            ]
        },
        ..................
    ]

这样获取父节点的数据列表:

@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
Query q = em.createQuery("Select p from Parent p", Parent.class);
List<Parent> parents = q.getResultList();
Return Response.ok(parents).build();

但是当我只得到一个父记录时,它可以得到孩子的完整数据,如下所示:

   {
        "id": "0001",
        "name": "A",
        "listOfChildren":[
           {
            "id": "01",
            "imagebase64": "data1"
           },
           {
             "id": "02",
             "imagebase64": "data2"
           }
         ]
    },

我卡住了,希望大家能帮帮我。非常感谢。

【问题讨论】:

    标签: java json hibernate jpa jax-rs


    【解决方案1】:

    返回实体对象不是一个好习惯,因此您应该创建“信息”对象以作为响应返回。对于忽略字段,请查找 @JsonIgnore 注释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2014-03-12
      相关资源
      最近更新 更多