Обновите метод в Rest как контроллеры - PullRequest
0 голосов
/ 04 сентября 2011

Я хочу написать rest как метод для обновления сущности. В этом случае я получаю идентификатор объекта из URL и данные из тела запроса. Проблема заключается в привязке идентификатора к бину. Потому что ни EntityManager, ни Spring-Data Crud Repo не имеют update(id, bean) метода. Так что я могу установить это сам

@RequestMapping(value = "/{id}", method = RequestMethod.POST)
public String update(@PathVariable("id") Long id, @Valid User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        user.setId(id);   //Very bad
        return "usersEdit";
    }
    user.setId(id);  //Bad
    repository.save(user);
    return "redirect:/users/" + id;
}

или отклоните DRY и укажите id в формах как личное поле для. Есть ли другие решения?

1 Ответ

1 голос
/ 05 декабря 2011

В Spring 3.1 экземпляр @ModelAttribute будет создан из переменной пути, если переменная пути и имена атрибутов модели совпадают, и имеется преобразователь для создания экземпляра атрибута модели из значения переменной пути:

@RequestMapping(value="/{account}", method = RequestMethod.PUT)
public String update(@Valid @ModelAttribute Account account, BindingResult result) {
    if (result.hasErrors()) {
        return "accounts/edit";
    }
    this.accountManager.saveOrUpdate(account);
    return "redirect:../accounts";
}

Полный пример доступен по адресу: https://github.com/rstoyanchev/spring-mvc-31-demo

...