无法构造 java.util.LinkedHashMap 的实例:没有字符串参数构造函数/工厂
Posted
技术标签:
【中文标题】无法构造 java.util.LinkedHashMap 的实例:没有字符串参数构造函数/工厂【英文标题】:Can not construct instance of java.util.LinkedHashMap: no String-argument constructor/factory 【发布时间】:2019-01-21 23:25:22 【问题描述】:在解析文件并转换为 POJO 时遇到问题。 我得到了以下异常。
com.fasterxml.jackson.databind.JsonMappingException:方法可从字符串值反序列化('\"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);
【问题讨论】:
你有什么问题?您了解为什么会出现异常吗? 已对 json 文件进行了更改。请立即检查。 好的...你仍然有一个字符串值而不是一个对象。 【参考方案1】:你的异常告诉你这里到底发生了什么。
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;
【讨论】:
以上是关于无法构造 java.util.LinkedHashMap 的实例:没有字符串参数构造函数/工厂的主要内容,如果未能解决你的问题,请参考以下文章
无法解析片段中的 ViewModelProvider 构造?
无法构造 java.util.LinkedHashMap 的实例:没有字符串参数构造函数/工厂