我很难弄清楚如何在Play 2 Java中进行更新
我有
User.java模型
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
@Constraints.Required
public String email;
@Constraints.Required
public String fullname;
}
我想更新它,所以在我的控制器中
public Result update(Long id) {
ObjectNode result = Json.newObject();
User employee = userService.get(id);
Form<User> userForm = formFactory.form(User.class).fill(employee);
// This won't trigger validation because it uses fill() not bind()
if (userForm.hasError()) {
result.set("message", userForm.errorsAsJson());
return badRequest(result);
}
// do update here
}
然后我尝试这样的一些不同方法
public Result update(Long id) {
ObjectNode result = Json.newObject();
User employee = userService.get(id);
Form<User> userForm = formFactory.form(User.class).fill(employee);
userForm = userForm.bindFromRequest();
// This will trigger validation but bindFromRequest will override my fill(employee) before.
if (userForm.hasError()) {
result.set("message", userForm.errorsAsJson());
return badRequest(result);
}
// do update here
}
上面的
bindFromRequest()
将覆盖我的fill(employee)
。我不想这样做,因为在我的请求中,我只想填写fullname
而不是我的email
时,我的email
属性将触发其所需的验证。所以我的问题是,如何只用现有值填充我的
fullname
属性,并仍然触发模型的验证约束? 最佳答案
将userForm = userForm.bindFromRequest();
更改为userForm.bindFromRequest();
我的工作代码与您的非常相似,这是我观察到的唯一区别。