当前位置: 首页 > 知识库问答 >
问题:

将一些值从hashmap导入POJO

卢毅
2023-03-14

我想将类型的Hashmap转换为POJO。我目前正在使用jackson进行转换,但是,由于请求是API请求,用户可能会提供比所需更多的字段。例如,hashmap可以是:

{
  field1ID:"hi",
  field2ID:["HI","HI","JO"],
  field3ID:"bye"
}

虽然波乔很简单

{
  field1ID:"hi",
  field3ID:"bye"
}

使用ObjectMapper时。convertValue,除非hashmap与pojo之间存在一对一的映射,否则将抛出IllegalArguemetException。我想做的是,如果有字段,那么映射字段。否则将其保留为空。

共有1个答案

雷国兴
2023-03-14

由于您在问题中没有提供任何代码,请考虑,例如,您有一张地图,如下所示:

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));

您想将其映射到联系人的实例:

@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有一个生日键,它不能映射到联系人类的任何字段。为了防止序列化失败,FAIL_ON_UNKNOWN_PROPERTIES功能已被禁用。

或者,您可以使用@JsonIgnoreProperties注释联系类,并将忽略未知设置为true

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class Contact {
    ...
}

然后执行转换:

ObjectMapper mapper = new ObjectMapper();
Contact contact = mapper.convertValue(map, Contact.class);

要将联系人实例转换回地图,可以使用:

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.convertValue(contact, 
        new TypeReference<Map<String, Object>>() {});
 类似资料:
  • 请帮我解决这个问题。 提前谢谢你。

  • 下面的代码检查ArrayList中是否存在id 数组列表结果很好,但映射值仅返回true。请帮助我如何根据条件添加k、v以映射,以便映射结果如下所示[{Access=false},{Access=true},{Access=false},{Access=false},{Access=true}]。

  • 问题内容: 我正在寻找仅使用JSTL设置HashMap的键值对。这可能吗? 我知道如何检索键值对,但是还没有找到设置它们的方法。 任何帮助,将不胜感激。 使用JSTL检索HashMap键/值对的示例: 问题答案: 您可以使用。

  • 我加入了三张桌子: 目前,我正在获取数据,构建一个新的数组并将其插入到我的最终表中。 但是,我想知道是否可以一气呵成,所以基本上直接从临时表?

  • 问题内容: 如何获得此映射中第一个键的第三个值?这可能吗? 问题答案: 存在执行此操作的库,但是最简单的普通Java方法是创建如下所示的:

  • 问题内容: 我有这段代码可以从“ jobseeker”表中选择所有字段,并可以通过将userType设置为“ admin”来更新“ user”表,其中userID =$ userID(此userID是我用户中的一个用户数据库)。然后,该语句应将这些值从“ jobseeker”表插入到“ admin”表中,然后从“ jobseeker表”中删除该用户。sql表很好,我的语句正在将userType更改