【问题标题】:How to dynamically avoid sending response containing all properties from relationship data如何动态避免发送包含关系数据中所有属性的响应
【发布时间】:2019-02-23 09:21:28
【问题描述】:

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

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

但是,在下订单时,我希望订单响应对象包含在订单详细信息中,仅包含客户(用户名、电子邮件)。我不想包含 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 服务的属性?

提前致谢。

【问题讨论】:

  • 我认为您需要使用单独的 DTO,而不是针对不同的数据传输案例。详情请见this question

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 2021-12-02
    • 2012-08-29
    • 2012-02-26
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多