我使用的是第三方API,返回的数据为Map〈String,Set〈?〉〉,格式为JSON,其中key是一个String,与类变量相同,Set包含相关的值,该值将是String,即使是Set,也只需要一个值。
现在,一种方法是循环Map并使用Reflection填充POJO。
我想知道Jackson/ Gson API是否可以用于填充POJO。我尝试了两种方法,但POJO中没有填充值。
JSON:
{
"Id": [
"345"
],
"Name": [
"John"
]
}
POJO:
public class Employee implements Serializable {
private String id;
private String name;
// getter / setter
}
My Code:
Map<String, Set<?>> data = someObject.getDataSet();
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Employee employee = mapper.convertValue(data, Employee.class);
System.out.println(employee);
更新:我尝试了以下操作,但POJO仍然为空
Map<String, Set<?>> data = someObject.getDataSet();
Map<String, String> map = data.entrySet().stream()
.filter(entry -> entry.getValue() != null)
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().iterator().next().toString()));
Employee employee = null;
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Employee = mapper.convertValue(map, Employee.class);
System.out.println(employee);
Gson gson = new Gson();
JsonElement jsonElement = gson.toJsonTree(map);
Employee = gson.fromJson(jsonElement, Employee.class);
System.out.println(employee);
1条答案
按热度按时间9lowa7mx1#
您的问题似乎是特定的,我认为没有内置的方法来实现这一点,您可以使用Jackson加载整个树,然后只将节点Map到POJO
例如:
另一种方式:
然后添加将属性值Map到POJO方法
您也可以在没有Map方法的情况下执行此操作: