我有一个控制器,它应该更新数据库中的任何对象,我如何才能使对象的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。如果需要更多的信息,请让我知道!
UPDATE,工作代码:
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);
也许使用Spring MVC用来实现@ModelAttribute
等相同的数据绑定工具会更好。
new WebDataBinder(entity).bind(new ServletRequestParameterPropertyValues(request));
注意,这种方法强制使用特定格式的参数名,如5.4 Bean操作和BeanWrapper中所述。