当前位置: 首页 > 知识库问答 >
问题:

当两个对象相同时,JSON返回一个ID字段和另一个完整对象字段

唐修能
2023-03-14

我有像下面这样的课。

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@Entity
@Table( name = "hires", indexes = { @Index( name = "idx_hire_date", columnList = "date DESC" ) }, uniqueConstraints = {
    @UniqueConstraint( columnNames = { "vehicle_id", "po_number" } ) } )
@DynamicUpdate
@JsonIdentityInfo( generator = ObjectIdGenerators.PropertyGenerator.class, property = "id" )
public class Hire implements Serializable {

@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
int id;

@OneToOne( targetEntity = Driver.class, fetch = FetchType.EAGER )
@JoinColumn( name = "pass_payer", referencedColumnName = "id", nullable = true )
Driver passPayer;

@OneToOne( targetEntity = Driver.class, fetch = FetchType.EAGER )
@JoinColumn( name = "driver_id", referencedColumnName = "id", nullable = true )
Driver driver;
...
}

我通过Restendpoint获取此对象。问题是,当字段passPayer和driver对象相等时,在返回的JSON中,driver字段只包含ID(它只是一个整数值),passPayer字段包含所有对象字段。

"passCost": 300.0,
        "passPayer": {
            "id": 9,
            "firstName": "XXXX",
            "lastName": "XXXXXX",
            "idNo": "000000000000"
        },
        "driver": 9,
        "driverSalary": xxxx.xx, 

当这些字段具有不同的对象时,两个字段都显示如下所示的完整详细信息。

"passCost": 300.0,
        "passPayer": {
            "id": 9,
            "firstName": "XXXX",
            "lastName": "XXXXXX",
            "idNo": "000000000000"
        },
        "driver": {
            "id": 4,
            "firstName": "YYYYYY",
            "lastName": "YYYYYYY",
            "idNo": "10101010101"
        },
        "driverSalary": 00000.00,

我需要两个对象都包含数据(字段。[id,firstName,lastName,idNo]),无论它们是否相等。

欢迎提供任何线索!

共有1个答案

仲和韵
2023-03-14

这是由jsonidentialinfo(generator=ObjectIdGenerators.PropertyGenerator.class,property=“id”)引起的,请检查文档。引用:

注释,用于指示注释类型或属性的值应序列化,以便实例包含其他对象标识符(除实际对象属性外),或作为引用,该引用由引用完整序列化的对象id组成。

由于两个字段都引用同一个对象,因此第二个字段被序列化为对第一个对象的引用。

根据我的经验,此注释主要用于处理循环引用,因此您可以:

  1. 如果您的用例允许,请删除它(对象中没有循环引用)
 类似资料:
  • 我有两个java类如下 现在我有了一个A级对象Aobj,两个字段都已初始化。我用的是小豆子。copyProperties(Bobj,Aobj),但只有字段值被复制到Bobj中。名称列表为空。有没有办法深度复制一个对象,以便它复制所有字段,包括列表、地图等集合。 我在某个地方听说了推土机,不确定这是否是为了这个目的。

  • 我有这两个类,它们都有一个项目列表,我试图返回一个新对象“ItemWithDiscount”,它具有这两个类的属性,这在服务/控制器申请中。我尝试用流映射它们,但没能做到。谁能给我一个简单的方法来做这件事吗?

  • 问题内容: 如果不是原始类型,返回类型的正确方法是什么?例如。我目前使用null如下。 问题答案: Void类是一个无法实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用。 因此,以下任何条件就足够了: 参数化并返回或 参数化并返回 用您的一个参数化 你不能让这种方法,和其他任何回报 的东西 。由于忽略了某些内容,因此您可以返回任何内容。

  • 我试图通过@datajpatest测试我的Spring存储库。我想通过电子邮件找到完全相同的用户,但我得到了另一个角色集。 首先,如果我开始我的项目,然后我设置测试用户和他的角色。 将保存用户的UserService中的一段代码。 在测试中比较对象是好主意,还是例如用户名/电子邮件就足够了?

  • 问题内容: 请忘记设计。我知道OOP指定私有对象是该类的私有对象。我的问题是,为什么将OOP设计为使私有字段具有类级别的访问权限而不具有对象级别的访问权限? 问题答案: private修饰符强制执行封装原理。 这个想法是,“外部世界”不应更改Person内部流程,因为Person的实现可能会随时间而变化(并且你将不得不更改整个外部世界以解决实现方面的差异-这几乎是不可能的)。 当Person实例访

  • 问题内容: 我有一个文件夹,其中包含index.js和几个模型(类)index.js book.js author.js 问题在于Author类似乎找不到书!它只是一个空对象。但是,如果我在index.js中切换导出,则将Book放在Author之后- 可以,但是其他模型将停止工作。 我不想做任何骇客工作。 问题答案: 这是因为您具有循环依赖关系。Node.js以非常特定的方式处理此问题: 第一个