ファイルの解析およびPOJOへの変換中に問題に直面する。例外の下で私は得ています。
com.fasterxml.jackson.databind.JsonMappingException:Java.util.LinkedHashMapのインスタンスを構築できません:文字列値からデシリアライズする文字列引数コンストラクタ/ファクトリメソッドがありません( '{\ "hosturl_path \":\ "/ images \"} ')
Jsonファイルの例:
{"test": [{
"a112a": "testhost",
"a112b": "{\"hosturl_path\":\"/images\"}"
}]}
POJO-
import Java.io.Serializable;
import Java.util.Map;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.ANY,
setterVisibility = JsonAutoDetect.Visibility.ANY)
public class TestPojo implements Serializable
{
private static final long serialVersionUID = 638312139361412L;
@JsonProperty("a112a")
private String Host;
@JsonProperty("a112b")
private Map<String,String> parameterMap;
public TestPojo()
{
}
public TestPojo(String Host, Map<String, String> parameterMap)
{
this.Host = Host;
this.parameterMap = parameterMap;
}
public String getHost()
{
return Host;
}
public void setHost(String Host)
{
this.Host = Host;
}
public Map<String, String> getParameterMap()
{
return parameterMap;
}
public void setParameterMap(Map<String, String> parameterMap)
{
this.parameterMap = parameterMap;
}
}
メインクラス
import Java.io.IOException;
import Java.net.URL;
import Java.util.List;
import Java.util.Map;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class TestApp
{
public static void main(String[] args) throws IOException
{
ObjectMapper mapper = new ObjectMapper();
String fileName = "sampleFile.json";
URL resource = TestApp.class.getResource(fileName);
Map<String,List<TestPojo>> map = mapper.readValue(resource, new
TypeReference<Map<String, List<TestPojo>>>()
{
});
System.out.println(map);
}
}
あなたの例外は、ここで何が起こっているかを正確に伝えています。
com.fasterxml.jackson.databind.JsonMappingException:Java.util.LinkedHashMapのインスタンスを構築できません:文字列値からデシリアライズする文字列引数コンストラクタ/ファクトリメソッドがありません( '{\ "hosturl_path \":\ "/ images \"} ')
あなたのTestPojo.class
、String
をMap
に逆シリアル化しようとしています。
@JsonProperty("a112b")
private Map<String,String> parameterMap;
これをTestPojo.classに調整する場合
@JsonProperty("a112b")
private String parameterMap;
実行が成功します。ただし、これは望ましい動作ではないと思います。 sampleFile
を変更できる場合、Jacksonはそれを正しくデシリアライズできるはずです。
{"test": [{
"a112a": "testhost",
"a112b": {"hosturl_path":"images"}
}]}
さもないと。カスタムデシリアライザーを指定する必要があります。
@JsonDeserialize(CustomParameterDeserializer.class)
@JsonProperty("a112b")
private Map<String,String> parameterMap;