POJO的Java映射器/修补程序

时间:2017-03-23 13:00:24

标签: java mapping

我有以下Java模型:

public class Product {

    private String name;

    private String description;

    private Date createDate;

    public Product(String name, String description, Date createDate) {
        this.name = name;
        this.description = description;
        this.createDate = createDate;
    }

    ...

}

我创建了Product的实例:

Date date = new Date();
Product product = new Product("Test name", "Test description", date);

assertTrue("Test name", product.getName())
assertTrue("Test description", product.getDescription())
assertTrue(date, product.getDate());

另外,我有以下Map

Map<String, Object> patchMap = new HashMap<>();
patchMap.put("description", "New description");

我需要使用此product中的值修补现有patchMap对象。只有description字段应该受到影响,其他所有字段(例如namecreateDate都应该保留旧值。

我需要这样的东西:

product = mapper.patch(product, patchMap);

assertTrue("Test name", product.getName())
assertTrue("New description", product.getDescription())
assertTrue(date, product.getDate());

你能否建议一个Java映射库(并展示一个例子),它可以提供开箱即用的这种补丁功能。

2 个答案:

答案 0 :(得分:1)

你可以和杰克逊一起做这件事。

<a class="btn-second" href="Gallery.html">dowiedz się więcej</a> 有一个名为ObjectMapper的方法,可以使用新数据更新现有结构。

readerForUpdating

如果您不想提供JSON输入,也可以使用Jackson API中提供的其他方法跳过此步骤。

答案 1 :(得分:0)

您可以使用PropertyDescriptor获取setter方法并调用它,例如:

Method setter = new PropertyDescriptor("description", Product.class).getWriteMethod();
setter.invoke(product, patchMap.get("description"));

这就是map

的用法
for(String key : patchMap.keySet()){
    try{
        Method setter = new PropertyDescriptor(key, Product.class).getWriteMethod();
        setter.invoke(product, patchMap.get(key));
    }catch(IntrospectionException e){
        System.out.println("Unable to access method for property " + key + " : " + e.getMessage());
    }
}