gpt4 book ai didi

java - 将 @JsonCreator 与嵌套 Json 对象一起使用时面临问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:01:19 25 4
gpt4 key购买 nike

我有一些运行良好的旧代码,但现在我想在域对象中使用@JsonCreator,并且我能够重构所有内容,但我现在陷入了一个问题。在一种情况下,我的 Json 结构如下:

  [{
"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 和“address”,因为在 Json 中我没有任何“address”属性,因此会出现 JsonParsing 错误。

如果我将 emailAddress 声明为 String 而不是 EmailAddress 并删除 EmailAddress 对象,那么问题可以很容易解决,但 EmailAddress 对象的地址字段在许多其他地方使用,修改需要付出很大的努力,并且有很多这样的情况。还有其他解决办法吗??

最佳答案

那么你的问题到底是什么?如果目标是允许这两者:

"stucked@gmail.com" 
{ "address" : "stucked@gmail.com" }

它应该已经可以工作了: jackson 发现,如果找到 JSON 字符串,则可以使用单字符串构造函数;如果找到 JSON 对象,则 setter /字段。您只需确保名称匹配(“地址”与“电子邮件地址”)。

关于java - 将 @JsonCreator 与嵌套 Json 对象一起使用时面临问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29288325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com