将 Json 占位符文件映射到 java 对象
Mapping a Json placeholder file to java Object
所以我有以下 JSON 来表示我想映射到 JAVA 中的对象的 City 对象。
这用于过滤掉不需要的字段
{
"class": [
{
"id": "default",
"type": [
"riskType",
"firstTime"
],
"direction": [],
"town": [
"leader",
{
"streets": [
"mainStreet"
]
}
]
}
]
}
为了映射它,我正在使用
ojectMapper.readValue(inputStream, new TypeReference<HashMap<String, Set<PayloadClass>>>() { });
我的负载class如下:
@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();
而我的城镇 class 这样做是为了代表一个城镇有一个领导者和街道
@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 中的领导字段。没有这个字段,它的执行没有问题。
您的json格式有误。如果 town 是一个城市对象数组,带有一个领导者和一个街道名称数组,你应该写成 json :
{
"town": [
{
"leader": "",
"streets" : [
"mainStreet"
]
}
]
}
所以我有以下 JSON 来表示我想映射到 JAVA 中的对象的 City 对象。 这用于过滤掉不需要的字段
{
"class": [
{
"id": "default",
"type": [
"riskType",
"firstTime"
],
"direction": [],
"town": [
"leader",
{
"streets": [
"mainStreet"
]
}
]
}
]
}
为了映射它,我正在使用
ojectMapper.readValue(inputStream, new TypeReference<HashMap<String, Set<PayloadClass>>>() { });
我的负载class如下:
@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();
而我的城镇 class 这样做是为了代表一个城镇有一个领导者和街道
@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 中的领导字段。没有这个字段,它的执行没有问题。
您的json格式有误。如果 town 是一个城市对象数组,带有一个领导者和一个街道名称数组,你应该写成 json :
{
"town": [
{
"leader": "",
"streets" : [
"mainStreet"
]
}
]
}