java - 将一些值从 hashmap 导入到 POJO

标签 java jackson pojo

我想将 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 类。并设置ignoreUnknowntrue:

@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/

相关文章:

java - 什么时候应该使用Java Extension Class Loader?

android - 您想在您的 Android 应用程序中集成基于 POJO 或 Cursor 的库吗?

java - Jackson 1.8.5 (for JSON) 不反序列化 : "no such class found"

spring - Mybatis映射器返回空值。在 Spring -rest-mybatis-mysql-gradle

java - 如何通过组合键的哈希码来计算 Pojo 的哈希码

java - 如何将 JSON 值发送到另一个 Activity(Android)

java - android.view.InflateException : Binary XML file line #22: Error inflating class ImageView

java - 如何将.py导入到java中

java - 将 jsonObject 转换为模型对象时如何检测缺少的字段

java - 定制 Jackson 反序列化器来处理任何 bean 的属性