使用 Jackson 反序列化为 Map<java.lang.String, java.net.URI>
Deserializing into Map<java.lang.String, java.net.URI> with Jackson
我有这个 JSON 片段:
{
"uploadData": {
"25967391": {
"jobid": "jobId",
"numberOfFiles": "1",
"outputFiles": {
"1": "file.pdf"
},
"originalFiles": {
"1": "./target/test-classes/com/tools/myProject/input/File.pdf",
"2": "./target/test-classes/com/tools/myProject/input/File.csv"
}
}
}
}
我想做的是将 "originalFiles" 反序列化为 Map。因为 "originalFiles" 中的“1”和“2”都是非绝对 URI,所以我已经有一个自定义的 class URIStringDeserializer
Paths.get(".").toUri().resolve(uriString).normalize().toASCIIString()
这给了我
file:/C:/Users/userName/IdeaProjects/myProject/target/test-classes/com/tools/myProject/input/File.pdf
用于 originalFiles
的第一个 uri。
这是 class 和 uploadData
字段:
@JsonIgnoreProperties(ignoreUnknown = true)
public class UploadData{
@JsonProperty("originalFiles")
private Map<Integer, URI> originalFiles;
//getters and setters omitted
}
用 @JsonDeserialize(using = CustomDeserializer.class)
注释 uploadData
字段会导致 com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.net.URI out of START_OBJECT token
。如何让我的自定义反序列化器与 tose 映射一起工作?
经过一些外部帮助,找到了解决方案。添加
@JsonDeserializer(contentUsing = CustomDeserializer.class)
已经完成了我想要的。
我有这个 JSON 片段:
{
"uploadData": {
"25967391": {
"jobid": "jobId",
"numberOfFiles": "1",
"outputFiles": {
"1": "file.pdf"
},
"originalFiles": {
"1": "./target/test-classes/com/tools/myProject/input/File.pdf",
"2": "./target/test-classes/com/tools/myProject/input/File.csv"
}
}
}
}
我想做的是将 "originalFiles" 反序列化为 Map。因为 "originalFiles" 中的“1”和“2”都是非绝对 URI,所以我已经有一个自定义的 class URIStringDeserializer
Paths.get(".").toUri().resolve(uriString).normalize().toASCIIString()
这给了我
file:/C:/Users/userName/IdeaProjects/myProject/target/test-classes/com/tools/myProject/input/File.pdf
用于 originalFiles
的第一个 uri。
这是 class 和 uploadData
字段:
@JsonIgnoreProperties(ignoreUnknown = true)
public class UploadData{
@JsonProperty("originalFiles")
private Map<Integer, URI> originalFiles;
//getters and setters omitted
}
用 @JsonDeserialize(using = CustomDeserializer.class)
注释 uploadData
字段会导致 com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.net.URI out of START_OBJECT token
。如何让我的自定义反序列化器与 tose 映射一起工作?
经过一些外部帮助,找到了解决方案。添加
@JsonDeserializer(contentUsing = CustomDeserializer.class)
已经完成了我想要的。