Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于POJO的Java映射器/修补程序_Java_Mapping - Fatal编程技术网

用于POJO的Java映射器/修补程序

用于POJO的Java映射器/修补程序,java,mapping,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 = d

我有以下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;
    }

    ...

}
我已经创建了
产品的一个实例

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<String, Object> patchMap = new HashMap<>();
patchMap.put("description", "New description");
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());
    }
}

请您推荐一个Java映射库(并展示一个示例),它可以为这种开箱即用的修补提供功能。

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

Method setter = new PropertyDescriptor("description", Product.class).getWriteMethod();
setter.invoke(product, patchMap.get("description"));
这就是它如何使用
地图

Map<String, Object> patchMap = new HashMap<>();
patchMap.put("description", "New description");
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());
    }
}

你可以和杰克逊一起做

它的
ObjectMapper
有一个名为
readerforupdate
的方法,可以用新数据更新现有结构

ObjectMapper mapper = ...

String json = "{\"description\": \"new description\"}";

mapper.readerForUpdating(objectToUpdate).readValue(json);
如果不想提供JSON输入,也可以使用Jackson API中提供的其他方法跳过此步骤