我已经看过并阅读过有关此主题的几个问题,但似乎都没有解决我的问题。我很可能会犯一个(或两个)轻微但严重的错误,但我没有看到它们。
我的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。
答案 0 :(得分:1)
您需要在构造函数上使用两个注释:@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中的详细信息。