我有由,我映射到的POJO,然後在收集存儲結構的一個大的JSON文件的映射。結構與此類似:自傑克遜解串器忽略某些對象
[
{
"id": 1234,
"file": "C:\\Programs\\Program1.exe",
"exists": true
}
{
"id": 5678,
"file": "C:\\Programs\\Program2.exe",
"exists": false
}
...
]
使用Jackson streaming API我已經讀取了所有這些結構,併成功將POJO存儲在Collection中。我的POJO類看起來是這樣的:
public class Programs
{
@JsonProperty("id")
private Integer id;
@JsonProperty("file")
private String file;
@JsonProperty("exists")
private Boolean exists;
@JsonGetter("id")
public Integer getId()
{
return id;
}
@JsonGetter("file")
public String getFile()
{
return file;
}
@JsonGetter("exists")
public Boolean getExists()
{
return exists;
}
}
不過,我想省略過程,以便沒有POJO爲他們創造了有史以來反序列化過程有"exists"
設置爲false
任何結構。所以我寫了一個自定義解串器的這個幫助,所以質疑[How do I call the default deserializer from a custom deserializer in Jackson],我重寫deserialize
看起來像:
@Override
public Programs deserialize(JsonParser parser, DeserializationContext context)
throws IOException
{
Programs programs = (Programs)defaultDeserializer.deserialize(parser, context);
if (!programs.getExists())
{
throw context.mappingException("[exists] value is false.");
}
return programs;
}
然而,當我運行一些單元測試,我得到以下錯誤:
"Can not deserialize instance of java.util.ArrayList out of START_OBJECT token"
message was "Class com.myprogram.serializer.ProgramsJsonDeserializer
has no default (no arg) constructor"
(添加無參數的構造函數給出了錯誤說StdDeserializer沒有默認的構造函數)。
這是正確的做法,以實現什麼,我試圖做的?而且沒有人知道爲什麼我收到此錯誤信息?
非常感謝,這似乎做的伎倆! – MeanwhileInHell