我有以下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
字段应该受到影响,其他所有字段(例如name
和createDate
都应该保留旧值。
我需要这样的东西:
product = mapper.patch(product, patchMap);
assertTrue("Test name", product.getName())
assertTrue("New description", product.getDescription())
assertTrue(date, product.getDate());
你能否建议一个Java映射库(并展示一个例子),它可以提供开箱即用的这种补丁功能。
答案 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());
}
}