gpt4 book ai didi

使用 ObjectMapper 将 POJO 转换为 HashMap 时出现 java.lang.String out of START_ARRAY 错误

转载 作者:行者123 更新时间:2023-12-02 11:49:10 24 4
gpt4 key购买 nike

@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, String>> hashMapType
= new TypeReference<HashMap<String, String>>() {};
return new ObjectMapper().convertValue(this, hashMapType);
}
}

我正在尝试将上述类的实例转换为 HashMap<String,String>使用instance.convertToMap(),但这失败并出现错误

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)

我相信这是因为反序列化到 map 时列表没有转换为字符串。

有没有办法可以将 POJO 转换为 Map<String,String>我不想要 Map<String, Object> 的类型?

最佳答案

您不能执行 TypeReference类型 Map<String, String>states不是字符串,而是列表,因此您可以更改 TypeReference进入Map<String,Object>即使您有一个列表或者您希望将来添加一个复杂的对象,这也应该结束

public Map<String, String> convertToMap() {
TypeReference<HashMap<String, Object>> hashMapType = new TypeReference<HashMap<String, Object>>() {
};
return new ObjectMapper().convertValue(this, hashMapType);
}

更新:

您仍然可以保留Map<String, String>作为方法的返回类型 convertToMap()

完整示例:

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

关于使用 ObjectMapper 将 POJO 转换为 HashMap<String,String> 时出现 java.lang.String out of START_ARRAY 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47997891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com