如何动态避免发送包含关系数据中所有属性的响应

问题描述 投票:0回答:1

如果这个问题非常微不足道的话,我是初学者和休息的新手,因此请原谅我。

我有一种情况,应用程序允许用户注册和下订单。在注册用户时,该服务应该能够发送包含用户信息的响应,包括 - 用户名,电子邮件,联系号码,地址等。

但是,在下订单时,我希望订单响应对象包含在订单详细信息中,只包括客户(用户名,电子邮件)。我不想包含User对象的地址和其他信息部分。

目前,正在发生的事情是,无论何时,我指的是Order实例中的现有用户实例,Order响应都具有注册用户的完整元组信息。

在订单确认响应中,我真的不想要整个用户信息。

但是,如果为用户注册引用了相同的Order实体,我希望该服务包含Order实体中的所有字段。

我试过参考以下链接 -

Jackson Change JsonIgnore Dynamically How do I exclude fields with Jackson not using annotations?

但是,这里提到的解决方案将始终忽略响应中的属性,而不管实体被引用的场景如何。

例如 - 订单服务的响应如下。

{
    "id": "ORD-1000",
    "priority": null,
    "status": "Open",
    "customer": {
        "id": "1000",
        "name": "Avion Solutions",
        "email": "[email protected]",
        "contact": null,
        "customerType": "gold-sx",
        "shipToContactId": null,
        "billToContactId": null
    },
    "urgency": null
}

在上面的响应元组中,让我们说,我只想要订单信息和基本的客户信息,如姓名和电子邮件。

如果客户正在注册,则响应应包含上述元组中提到的所有信息。

如何根据使用实体对象的上下文动态忽略REST服务响应的属性?

提前致谢。

json spring-boot jax-rs spring-rest
1个回答
0
投票

尝试使用@JsonView注释。您可以定义给定属性的可见性,并且可以在REST Controller上定义要显示的级别。有关更多信息和示例,请阅读以下内容:

  1. Jackson JSON Views
  2. Jackson – Bidirectional Relationships
  3. Using @JsonView with Spring MVC
© www.soinside.com 2019 - 2024. All rights reserved.