我想将 Hashmap 类型转换为 POJO。我目前正在使用 jackson 对其进行转换,但是,由于该请求是 API 请求,因此用户可能会提供比所需更多的字段。 例如, HashMap 可能是:
{
field1ID:"hi",
field2ID:["HI","HI","JO"],
field3ID:"bye"
}
而 pojo 只是简单
{
field1ID:"hi",
field3ID:"bye"
}
当使用ObjectMapper.convertValue
时,除非存在从hashmap到pojo的一对一映射,否则将抛出IllegalArguemetException。我想做的是,如果该字段存在,则绘制该字段的 map 。否则将其保留为空。
最佳答案
由于您没有在问题中提供任何代码,请考虑,例如,您有一张 map ,如下所示:
Map<String, Object> map = new HashMap<>();
map.put("firstName", "John");
map.put("lastName", "Doe");
map.put("emails", Arrays.asList("johndoe@mail.com", "john.doe@mail.com"));
map.put("birthday", LocalDate.of(1990, 1, 1));
并且您希望将其映射到 Contact
的实例:
@Data
public class Contact {
private String firstName;
private String lastName;
private List<String> emails;
}
可以通过以下代码实现:
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Contact contact = mapper.convertValue(map, Contact.class);
在上面的示例中, map 有一个 birthday
键,该键无法映射到 Contact
类的任何字段。为了防止序列化失败,FAIL_ON_UNKNOWN_PROPERTIES
功能已被禁用。
或者,您可以使用 @JsonIgnoreProperties
注释 Contact
类。并设置ignoreUnknown
为true
:
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class Contact {
...
}
然后执行转换:
ObjectMapper mapper = new ObjectMapper();
Contact contact = mapper.convertValue(map, Contact.class);
<小时/>
要将 Contact
实例转换回 map ,您可以使用:
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.convertValue(contact,
new TypeReference<Map<String, Object>>() {});
关于java - 将一些值从 hashmap 导入到 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57983639/