ノー文字列引数のコンストラクタ/工場:java.util.LinkedHashMapのインスタンスを作成することはできません

user6597131:

ファイルを解析し、POJOに変換しながら問題に直面。例外の下には私が取得しています。

com.fasterxml.jackson.databind.JsonMappingExceptionは:java.util.LinkedHashMapのインスタンスを構築することはできません:なし文字列引数コンストラクタ/ファクトリメソッドを文字列値からデシリアライズする( '{\ 『hosturl_path \』:\ 『/画像\』} 「)

サンプル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);
    }
}
shinjw:

あなたの例外は、ここで起こっている正確に何を言っています。

com.fasterxml.jackson.databind.JsonMappingExceptionは:java.util.LinkedHashMapのインスタンスを構築することはできません:なし文字列引数コンストラクタ/ファクトリメソッドを文字列値からデシリアライズする( '{\ 『hosturl_path \』:\ 『/画像\』} 「)

あなたにはTestPojo.class、あなたはデシリアライズしようとしているStringMap

@JsonProperty("a112b")
private Map<String,String> parameterMap;

あなたのTestPojo.classにこれを調整した場合

@JsonProperty("a112b")
private String parameterMap;

あなたは成功した実行を取得します。しかし、私は、これは望ましい動作ではないことを想像するだろう。あなたが変更する能力を持っている場合は、あなたのsampleFileジャクソンは正しくそれをデシリアライズすることができるはずです。

{"test": [{
 "a112a": "testhost", 
 "a112b": {"hosturl_path":"images"}
}]}

さもないと。カスタムデシリアライザを指定する必要があります。

@JsonDeserialize(CustomParameterDeserializer.class)
@JsonProperty("a112b")
private Map<String,String> parameterMap;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=179970&siteId=1