【发布时间】:2020-11-30 11:33:05
【问题描述】:
我想为 Jackson 创建一个 DTO,以将我的 jsonPatch 变量序列化为 json 补丁变量。
我有这个属性来代表类Person:
@JsonProperty("lastName")
private String lastName;
@JsonProperty("firstName")
private String firstName;
@JsonProperty("age")
private int age;
@JsonProperty("a")
private A classA;
A 类也有:
@JsonProperty("colour")
private String colour;
@JsonProperty("quantity")
private BigDecimal quantity;
我创建的 DTO 是这样的:
@JsonProperty("path")
protected String path;
@JsonProperty("op")
protected String operation;
@JsonProperty("value")
protected Object values;
我收到的 json 补丁可以在值类上包含 Person 或 A 类:
个人补丁:
[
{
"value":
{
"lastName": "Doe",
"firsName": "John"
},
"path": /people",
"op": "replace"
}
]
A 补丁:
[
{
"value":
{
"quantity": 12.1,
},
"path": /A",
"op": "remove"
}
]
值可以是 Person 或 A 类,正如我告诉你的,这就是为什么该值是 Object 类的原因。
我的问题是当 Jackson 序列化 Person 的值时,它序列化为 Map,而当值来自对象 A 时,它序列化为 double,这将导致转换值,这可能非常危险。
有什么方法可以告诉 Jackson 这些值来自 Person 对象或 A 对象,因此它可以在不进行任何强制转换的情况下进行序列化?
【问题讨论】: