【发布时间】:2020-10-02 08:38:34
【问题描述】:
所以我有以下 JSON 来表示我想映射到 JAVA 中的对象的 City 对象。 这用于过滤掉不需要的字段
{
"class": [
{
"id": "default",
"type": [
"riskType",
"firstTime"
],
"direction": [],
"town": [
"leader",
{
"streets": [
"mainStreet"
]
}
]
}
]
}
为了映射它,我使用了
ojectMapper.readValue(inputStream, new TypeReference<HashMap<String, Set<PayloadClass>>>() { });
我的payload类如下:
@Data
@EqualsAndHashCode(exclude = {"town", "direction", "type"})
@NoArgsConstructor
public class PayloadClass {
private String id;
@NonNull private Set<String> type = Collections.emptySet();
@NonNull private Set<String> direction = Collections.emptySet();
@NonNull private Set<Town> town = Collections.emptySet();
我的城镇等级是为了代表一个城镇有领导和街道
@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Town{
@JsonProperty(value = "leader")
private String leader;
@JsonProperty(value = "streets")
private Set<String> streets = Collections.emptySet();
问题在于映射,它试图在一个对象内映射领导者和街道集。
然后我收到以下错误,但不确定原因:
U [main] ERROR - Cannot construct instance of `
com.Town` (although at least one Creator
exists): no String-argument constructor/factory method to deserialize from String value
('leader')
at [Source: (BufferedInputStream); line: 16, column: 9] (through reference chain:
java.util.HashMap["PayloadClass"]->java.util.HashSet[0]-
com.PayloadClass["town"]->java.util.HashSet[1])
我正在尝试为上游应用程序保留这种格式的 JSON,希望我可以在映射类型中解决这个问题。
所以我要添加的新字段是 Json 中的领导者字段。如果没有此字段,它会毫无问题地执行。
【问题讨论】:
-
如果 town 是一个对象数组,你应该写在 json 中: "town": [ { "leader", { "streets": [ "mainStreet" ] } ]
-
@GweltazNiquel 我试过了,但它在 IDE 中抱怨 ||ERROR: ':' expected, got ',' ||用逗号跟在“leader”之后
-
您是否有公开可见的领导者的获取者/设置者?见:baeldung.com/jackson-field-serializable-deserializable-or-not
标签: java json jackson set objectmapper