0

我想为实体更新编写类似休息的方法。在这种情况下,我从 url 中检索实体 ID,从请求正文中检索数据。问题在于将 id 与 bean 绑定。因为 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 作为私有字段放入表单中。还有其他解决方案吗?

4

1 回答 1

1

在 Spring 3.1 中,如果路径变量和模型属性名称相同,则 @ModelAttribute 将从路径变量实例化,并且有一个转换器可以从路径变量值实例化模型属性:

@RequestMapping(value="/{account}", 方法 = RequestMethod.PUT)
public String update(@Valid @ModelAttribute Account account, BindingResult 结果) {
    if (result.hasErrors()) {
        返回“帐户/编辑”;
    }
    this.accountManager.saveOrUpdate(account);
    返回“重定向:../accounts”;
}

完整示例位于: https ://github.com/rstoyanchev/spring-mvc-31-demo

于 2011-12-05T15:53:13.780 回答