Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将POJO转换为HasMap时,java.lang.String超出START_数组错误<;字符串,字符串>;使用ObjectMapper_Java_Jackson - Fatal编程技术网

将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());
    }
}