无法构造java.util.LinkedHashMap的实例:无字符串参数构造函数/工厂

无法构造java.util.LinkedHashMap的实例:无字符串参数构造函数/工厂,java,jackson,objectmapper,Java,Jackson,Objectmapper,解析文件并转换为POJO时遇到问题。 下面是我得到的例外 com.fasterxml.jackson.databind.JsonMappingException:无法构造java.util.LinkedHashMap的实例:没有要从字符串值反序列化的字符串参数构造函数/工厂方法(“{\”hosturl\u path\”:\“/images\”) 示例json文件: {"test": [{ "a112a": "testhost", "a112b": "{\"hosturl_p

解析文件并转换为POJO时遇到问题。 下面是我得到的例外

com.fasterxml.jackson.databind.JsonMappingException:无法构造java.util.LinkedHashMap的实例:没有要从字符串值反序列化的字符串参数构造函数/工厂方法(“{\”hosturl\u 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.Serializable;
导入java.util.Map;
导入com.fasterxml.jackson.annotation.jsonautodect;
导入com.fasterxml.jackson.annotation.JsonIgnoreProperties;
导入com.fasterxml.jackson.annotation.JsonInclude;
导入com.fasterxml.jackson.annotation.JsonProperty;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY,GettServiceability=JsonAutoDetect.Visibility.ANY,
setterVisibility=jsonautodect.Visibility.ANY)
公共类TestPojo实现了可序列化
{
私有静态最终长serialVersionUID=638312139361412L;
@JsonProperty(“a112a”)
私有字符串主机;
@JsonProperty(“a112b”)
私有映射参数映射;
公共TestPojo()
{
}
公共TestPojo(字符串主机,映射参数Map)
{
this.host=host;
this.parameterMap=parameterMap;
}
公共字符串getHost()
{
返回主机;
}
公共void setHost(字符串主机)
{
this.host=host;
}
公共映射getParameterMap()
{
返回参数map;
}
公共void setParameterMap(映射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);
    }
}
import java.io.IOException;
导入java.net.URL;
导入java.util.List;
导入java.util.Map;
导入com.fasterxml.jackson.core.type.TypeReference;
导入com.fasterxml.jackson.databind.ObjectMapper;
公共类测试
{
公共静态void main(字符串[]args)引发IOException
{
ObjectMapper mapper=新的ObjectMapper();
String fileName=“sampleFile.json”;
URL resource=TestApp.class.getResource(文件名);
Map=mapper.readValue(资源,新
TypeReference()
{
});
系统输出打印项次(map);
}
}

您的异常将准确地告诉您这里发生了什么

com.fasterxml.jackson.databind.JsonMappingException:无法构造java.util.LinkedHashMap的实例:没有要从字符串值反序列化的字符串参数构造函数/工厂方法(“{\”hosturl\u path\”:\“/images\”)

TestPojo.class
中,您试图将
字符串
反序列化为
映射

@JsonProperty("a112b")
private Map<String,String> parameterMap;
您将获得一次成功的跑步。然而,我想这不是我想要的行为。如果您能够更改
sampleFile
Jackson应该能够正确地反序列化该文件

{"test": [{
 "a112a": "testhost", 
 "a112b": {"hosturl_path":"images"}
}]}
否则。您需要指定一个自定义反序列化程序

@JsonDeserialize(CustomParameterDeserializer.class)
@JsonProperty("a112b")
private Map<String,String> parameterMap;
@JsonDeserialize(CustomParameterDeserializer.class)
@JsonProperty(“a112b”)
私有映射参数映射;

你的问题是什么?您知道为什么会出现异常吗?我们已经在json文件中进行了更改。请现在检查。好的。。。您仍然有一个字符串值而不是对象。
@JsonDeserialize(CustomParameterDeserializer.class)
@JsonProperty("a112b")
private Map<String,String> parameterMap;