将 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"
      ]
    }
  ]
}