java将映射转换为pojo忽略一些键

时间:2018-10-19 12:48:51

标签: java

我有一个不确定其键的地图,但是我确定键包含所有pojo字段,说:

public class MyPojo{ 
    String name,
    String addr
}
//map contains keys that not in MyPojo field,e.g. age
map = {"name":"john","addr":"sf school","age":"21"}

在Java中,如何将其转换为pojo MyPojo实例? the following method抛出异常:

final ObjectMapper mapper = new ObjectMapper(); // jackson's objectmapper
final MyPojo pojo = mapper.convertValue(map, MyPojo.class);

2 个答案:

答案 0 :(得分:3)

您可以在 MyPojo 类中使用Jackson的@JsonIgnoreProrperties。 唯一的原因是ObjectMapper无法在MyPojo类中找到确切的映射。

API与ObjectMapper在同一库中提供。

这就是您的班级样子:

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyPojo{
   String name;
   String addr;
   //Other variables
}

要将其导入代码中,您需要添加以下内容:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

我希望这可以解决您的问题,这正是您所要的。

答案 1 :(得分:0)

在使用泛型键(以前未知)时,可能有一些键(属性名)出现在地图中,因为POJO中没有键作为属性。因此,在创建ObjectMapper实例时,请将以下属性设置为false,以使任何未知或缺少的属性都不会引发任何异常。

        final ObjectMapper mapper = new ObjectMapper(); // jackson's objectmapper
        mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);