如何解决您可以在Spring REST中序列化对象的属性而不是整个对象吗? 对象是一类的字段
为了阐明这一点-我在Spring REST项目中有一个类,该类的某个字段具有其他类的实例。
public class Event {
...
...
...
private Location location;
}
location
对象具有某些id
类型的int
。因此,在序列化Event
对象时,是否可以以某种方式仅附加location.id
字段而不是整个序列化的location
对象?
解决方法
如果允许您修改Location
类,则可以在Location.id
字段上尝试@JsonValue批注:
public class Event {
private String someField;
private Location location;
}
public class Location {
@JsonValue
private int id;
}
它将被序列化为:
{
"someFiled": "someValue","location": 122
}
如果您希望使用序列化字段的其他名称,请使用@JsonProperty
:
public class Event {
private String someField;
@JsonProperty("locationId")
private Location location;
}
public class Location {
@JsonValue
private int id;
}
{
"someFiled": "someValue","locationId": 122
}
我可以想到的另一种选择是将@JsonUnwrapped与@JsonIgnoreProperties结合使用。在这种情况下,无需更改Location
类,但是需要明确列出要排除的所有属性。
public static class Event {
private String someField;
@JsonUnwrapped(prefix = "location_")
@JsonIgnoreProperties({"fieldA","fieldB",...})
private Location location;
}
{
"someFiled": "someValue","location_id": 122
}
,请记住,这两种解决方案都会破坏反序列化。
如果您序列化整个Event对象,我相信也无法避免序列化location对象,因为它是其属性之一。但是,您可以尝试序列化对象的属性而不是对象本身,在这种情况下,可以序列化location.id而不是整个location对象。
唯一的问题是,您将必须找到某种方法来组织要序列化的文件中的数据,或者只是为每个属性创建一个不同的文件。