我有两个具有双向@OneToMany
/ @ManyToOne
关系的实体类。当我序列化Class A
时,我不想在类A内拥有整个Class B
,而只希望拥有id字段。但是,类B仍需要作为对象出现在类A中,而不仅仅是一个属性。我该如何实现?我正在使用JPA:2.2 / Jackson:2.9.0
@Entity
public class A {
private long id;
@ManyToOne
private B b;
// ...
}
@Entity
public class B {
private long id;
private String str;
private boolean bool;
@OneToMany
Set<A> aList;
// ...
}
A类的期望结果:
{
"id" : 123;
"b" : {
"id" : 321;
}
}
答案 0 :(得分:0)
您可以使用@JsonIgnore批注忽略任何对象上的序列化 示例代码应为:
No provider for ngControl
答案 1 :(得分:0)
您可以尝试使用@JsonIgnoreProperties忽略某些字段
@Entity
public class A {
private long id;
@ManyToOne
private B b;
// ...
}
@Entity
public class B {
private long id;
private String str;
private boolean bool;
@OneToMany
@JsonIgnoreProperties({"ignoreField1", "ignoreField2"})
Set<A> aList;
// ...
}
答案 2 :(得分:0)
有很多方法可以实现这一目标:
1)忽略属性:
@Entity
public class A {
private long id;
@JsonIgnoreProperties({"prop1", "prop2"})
@ManyToOne
private B b;
}
2)JsonIdentityInfo和PropertyGenerator
。需要id
属性。
public class A {
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
public B b;
public long id;
}
3)JsonValue-指示应用于序列化整个实例的单个方法/字段。
public class B {
@JsonValue
public long id;
}
4)自定义序列化器:
@Entity
@JsonSerialize(using = ASerializer.class)
public class A {
private long id;
@ManyToOne
private B b;
// ...
}
在这种情况下,您需要实现ASerializer
。
这不是自定义序列化对象的最简单但灵活的细粒度方法。
请参见this示例。