用于POJO的Java映射器/修补程序
我有以下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
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中提供的其他方法跳过此步骤