Rest中的更新方法与控制器一样

时间:2011-09-04 13:20:46

标签: java hibernate rest spring-mvc spring-data

我想像实体更新的方法一样写休息。在这种情况下,我从url检索实体id和从请求体检索数据。问题在于使用bean绑定id。因为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 个答案:

答案 0 :(得分:1)

在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