我已经阅读并阅读了有关此主题的几个问题,但是似乎都没有解决我的问题。我极有可能犯一个(或两个)较小但严重的错误,但我看不到它们。

我的JSON看起来像这样(实际示例要复杂得多,但这就是我将其简化为的内容):

[
  {
    "atcID": "AL011851"
  },
  {
   "atcID": "AL021851"
  }
]


我用来阅读的代码是:

StormData.java:

public class StormData {

@JsonCreator
StormData ( String atcID, String name ) {
    this.atcID = atcID;
    this.name = name;
};

public String getAtcID()    {
    return atcID;
}

public void setAtcID( String atcID )    {
    this.atcID = atcID;
}

String      atcID;
String      name;

}


主文件:

byte[] jsonData = Files.readAllBytes(Paths.get(fileName));

ObjectMapper objectMapper = new ObjectMapper();

List<StormData> myObjects = objectMapper.readValue(jsonData , new TypeReference<List<StormData>>(){});


但是我得到的错误是:

Cannot construct instance of `StormData` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)


那我想念什么呢? TIA。

最佳答案

您需要使用两种注释:构造函数上的@JsonCreator和每个参数上的@JsonProperty

@JsonCreator
StormData (@JsonProperty("atcID") String atcID, @JsonProperty("name") String name) {
    this.atcID = atcID;
    this.name = name;
}


请参见the official documentation

从JDK 8开始,您还可以注册Jackson ParameterNamesModule并使用-parameters选项编译代码。
请参见the documentation中的详细信息。

10-07 23:16