如果这个问题非常微不足道的话,我是初学者和休息的新手,因此请原谅我。
我有一种情况,应用程序允许用户注册和下订单。在注册用户时,该服务应该能够发送包含用户信息的响应,包括 - 用户名,电子邮件,联系号码,地址等。
但是,在下订单时,我希望订单响应对象包含在订单详细信息中,只包括客户(用户名,电子邮件)。我不想包含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服务响应的属性?
提前致谢。
尝试使用@JsonView
注释。您可以定义给定属性的可见性,并且可以在REST
Controller
上定义要显示的级别。有关更多信息和示例,请阅读以下内容: