我很难弄清楚如何在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();

我的工作代码与您的非常相似,这是我观察到的唯一区别。

10-06 09:39