【发布时间】: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