我已经阅读并阅读了有关此主题的几个问题,但是似乎都没有解决我的问题。我极有可能犯一个(或两个)较小但严重的错误,但我看不到它们。
我的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中的详细信息。