2016-10-19 26 views
0

我有這樣的JSON片段:反序列化到地圖<java.lang.String中,java.net.URI中的>傑克遜

{ 
"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」變成了地圖。因爲在「originalFiles」,「1」和「2」都是非絕對URI我已經有一個自定義類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 。 這裏是uploadData方面的階級:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class UploadData{ 

@JsonProperty("originalFiles") 
private Map<Integer, URI> originalFiles; 

//getters and setters omitted 
} 

註解uploadData@JsonDeserialize(using = CustomDeserializer.class)導致com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.net.URI out of START_OBJECT token。我怎樣才能讓我的自定義解串器使用tose map?

+0

可能是您的地圖json不正確。你可以試試這個嗎? 「originalFiles」:{ 「1」:{ 「./target/test-classes/com/tools/myProject/input/File.pdf」 }, 「2」:{ 」 ./target/ test-classes/com/tools/myProject/input/File.csv「 } } – Veeram

+0

此JSON片段只是較大JSON的一部分,我將其複製用於提問。根據JSONLint,整個部分是有效的。感謝您指點。我更新了片段。 –

回答

0

經過一些外部的幫助找到了解決方案。添加

@JsonDeserializer(contentUsing = CustomDeserializer.class) 

已經做了我想要的。