不容易解释标题,但我尝试做的是反序列化bean并使用自定义反序列化器反序列化该bean上的特定字段。
我有以下json数组
[
{
"name":"contact1",
"phone":"0655555058",
"image":{
"keyname":"bear.jpg",
"filename":"bear",
"extension":".jpg"
}
},
{
"name":"contact2",
"phone":"0655555058",
"image":{
"keyname":"bear.jpg",
"filename":"bear",
"extension":".jpg"
}
}
]
和我的联系人bean
public class Contact{
public String name;
public String phone;
public Document image;
}
我为Document class
注册了一个自定义反序列化器 ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Document.class, new DocumentDeserializer());
mapper.registerModule(module);
解串器工作我没有问题。但是当我尝试使用:
反序列化我的json数组时List<Contact> list = mapper.readValue(toDeserialize, mapper.getTypeFactory().constructCollectionType(List.class, Contact.class));
我没有包含2个联系人的列表,而是列出了包含4个联系人的列表。 2使用正确的名称和电话更正联系人但图像为空。还有另外两个没有名字和没有电话的联系人,但图片来自自定义解串器。
那么为什么图像没有设置为正确的联系人?
我也有:
@JsonDeserialize(using = DocumentDeserializer.class)
在我的文档bean上。
我想避免在我的联系人类的我的图片字段中添加注释,因为我的应用程序中有很多文档字段。
我做错了什么?
更新反序列化器:
public class DocumentDeserializer extends StdDeserializer<Document> {
BinariesManager manager = new BasicS3Manager(CommonVars.S3AccessKey, CommonVars.S3SecretKey, CommonVars.S3Bucket);
public DocumentDeserializer() {
super(Document.class);
}
@Override
public Document deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
String filename = node.get("filename").textValue();
String extension = node.get("extension").textValue();
String keyname = node.get("keyname").textValue();
Document document = buildDocumentBasedOnFileExtension(extension);
document.setTitle(filename);
File f = downloadFile(filename, extension, keyname);
document.load(f);
return document;
}