Spring MVC Reflection - вызвать сеттеры Pojo - PullRequest
1 голос
/ 15 ноября 2011

У меня есть контроллер, который должен обновлять любой объект в базе данных, как я могу сделать так, чтобы установщики объектов вызывались на основе ключей свойств этого объекта? Я слышал, что рефлексия может быть ответом на мои молитвы, так ли это, и если да, то какой самый элегантный способ достичь того, что я ищу?

    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);

1 Ответ

1 голос
/ 15 ноября 2011

Возможно, было бы лучше использовать те же средства привязки данных, которые Spring MVC использует для реализации @ModelAttribute и т. Д.

new WebDataBinder(entity).bind(new ServletRequestParameterPropertyValues(request));

Обратите внимание, что этот подход налагает определенный формат имен параметров, как описано в 5.4 Манипулирование компонентами и BeanWrapper .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...