将POJO转换为HasMap时,java.lang.String超出START_数组错误<;字符串,字符串>;使用ObjectMapper
我相信这是因为反序列化到映射时的列表没有转换为字符串将POJO转换为HasMap时,java.lang.String超出START_数组错误<;字符串,字符串>;使用ObjectMapper,java,jackson,Java,Jackson,我相信这是因为反序列化到映射时的列表没有转换为字符串 是否有一种方法可以将POJO转换为Map并且我不需要Map类型?您不能执行Map类型的TypeReference,因为states不是字符串,而是列表,因此,您可以将TypeReference更改为Map,即使您有一个列表,或者您希望将来添加一个复杂的对象,这也应该结束 Can not deserialize instance of java.lang.String out of START_ARRAY token at [Sourc
是否有一种方法可以将POJO转换为
Map
并且我不需要Map
类型?您不能执行Map
类型的TypeReference
,因为states
不是字符串,而是列表,因此,您可以将TypeReference
更改为Map
,即使您有一个列表,或者您希望将来添加一个复杂的对象,这也应该结束
Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: N/A; line: -1, column: -1] (through reference chain: java.util.HashMap["states"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3605)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3546)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3534)
你需要在相关的json中输入过去的内容。你能再详细说明一下吗?我正在尝试将类的一个实例转换为映射,而不直接处理它的json。您希望得到什么样的输出?不管机制如何,列表都不会自然地转换为映射。我需要方法ConvertMap的输出为HasMap。我需要将列表转换为字符串并存储在hasmap中,如果我将类型引用作为map。那么convertToMap方法返回的映射不也是HashMap吗?但是有一个约束条件,我需要返回一个HashMap,而不管POJOClass具有什么类型的字段。那么,有没有什么方法可以返回HashMap类,比如如何在创建HashMap时将列表转换为字符串?@achut1993,正如您所看到的,我正在返回Map。我只是在做TypeReference时才转换成Map。这个很好用。我将更新我的答案以向您展示一个示例,它不像您使用pojoClass.convertToMap().get(“状态”)那样工作,它是一个列表而不是字符串。@achut1993
List states=Collections.singletonList(pojoClass.convertToMap().get(“状态”)代码>
Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: N/A; line: -1, column: -1] (through reference chain: java.util.HashMap["states"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3605)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3546)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3534)
public Map<String, String> convertToMap() {
TypeReference<HashMap<String, Object>> hashMapType = new TypeReference<HashMap<String, Object>>() {
};
return new ObjectMapper().convertValue(this, hashMapType);
}
@Builder
@Getter
public class POJOClass {
@NonNull
private List<String> states;
@NonNull
private String country;
@NonNull
private String capital;
public Map<String, String> convertToMap() {
TypeReference<HashMap<String, Object>> hashMapType = new TypeReference<HashMap<String, Object>>() {
};
return new ObjectMapper().convertValue(this, hashMapType);
}
public static void main(String[] args) {
POJOClass pojoClass = new POJOClass(Lists.newArrayList("a", "b", "c"), "England", "London");
System.out.println(pojoClass.convertToMap());
}
}