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

时间:2019-02-23 09:21:29

标签: json spring-boot jax-rs spring-rest

我是弹簧靴子和休息的新手,因此,如果这个问题很琐碎,请原谅我。

我遇到一种情况,该应用程序允许用户注册和下订单。 注册用户后,服务应能够发送包含以下用户信息的响应:-用户名,电子邮件,联系电话,地址等。

但是,在下订单时,我希望订单响应对象在订单详细信息中仅包括客户(用户名,电子邮件)。我不想包括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": "support-na@avionsolutions.com",
        "contact": null,
        "customerType": "gold-sx",
        "shipToContactId": null,
        "billToContactId": null
    },
    "urgency": null
}

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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

  1. Jackson JSON Views
  2. Jackson – Bidirectional Relationships
  3. Using @JsonView with Spring MVC