我有一些旧的代码工作正常,但现在我想在域对象中使用@JsonCreator,我能够重新考虑所有的东西,但我现在陷入了一个问题。在一个场景中,我有Json Structure,如:
[{
"name" : "John",
"emailAddress" :"stucked@gmail.com"
}]
但是在java后端我的结构如下:
class Employee {
public final String name;
public final EmailAddress emailAddress;
Employee(final String name, final EmailAddress emailAddress) {
this.name = name;
this.emailAddress = emailAddress;
}
Employee() {
this(null, null)
}
}
class EmailAddress {
public final String address;
EmailAddress(final String address) {
this.address = address;
}
EmailAddress() {
this(null);
}
}
所以我想尝试:
class Employee {
public final String name;
public final EmailAddress emailAddress;
@JsonCreator
Employee(@JsonProperty("name")final String name,
@JsonProperty("emailAddress")final EmailAddress emailAddress) {
this.name = name;
this.emailAddress = emailAddress;
}
}
class EmailAddress {
public final String address;
@JsonCreator
EmailAddress(@JsonProperty("address")final String address) {
this.address = address;
}
}
现在的问题是在Employee域对象中使用@JsonProperty和“emailAddress”字段,然后在带有“地址”的EmailAddress对象中使用@JsonProperty,因为在Json中我没有任何“地址”属性,并且由于哪个JsonParsing错误即将来临。
如果我将emailAddress声明为String而不是EmailAddress并删除EmailAddress对象,那么很容易解决问题,但很多其他地方都使用了EmailAddress对象的地址字段,修改需要付出很多努力,而且有很多这样的情况。有没有其他解决方案?
答案 0 :(得分:0)
那么你的问题到底是什么?如果目标是允许这两个:
"stucked@gmail.com"
{ "address" : "stucked@gmail.com" }
它应该已经有效了:Jackson发现如果找到JSON String,可以使用单字符串构造函数;和setters / fields如果找到JSON对象。您只需要确保名称匹配(“地址”与“电子邮件地址”)。