我有一个控制器应该更新数据库中的任何对象,我该怎样才能根据该对象的属性键调用对象setter? 我听说反思可能是我祈祷的答案,就是这样,如果是这样,那么实现我正在寻找的最优雅的方式是什么?
Object entity = repository.findOne(id);
for (Object key : request.getParameterMap().keySet()) {
//invoke setter-method of entity
//for example, if key == "name" , i want entity.setName() to be called
}
repository.save(entity)
我正在运行Spring MVC。如果需要更多信息,请告诉我们!
更新,工作代码:
Object entity = repository.findOne(id);
BeanWrapper beanWrapper = new BeanWrapperImpl(entity);
for (Object key : request.getParameterMap().keySet()) {
beanWrapper.setPropertyValue(key.toString(), request.getParameterMap().get(key));
}
repository.save(entity);
答案 0 :(得分:1)
对于Spring MVC用于实现@ModelAttribute
等的相同数据绑定工具,也许会更好。
new WebDataBinder(entity).bind(new ServletRequestParameterPropertyValues(request));
请注意,此方法强制使用特定格式的参数名称,如5.4 Bean manipulation and the BeanWrapper中所述。