Spring boot 中的自定义表单验证

Edd*_*ark 1 custom-validators bean-validation spring-boot

我正在开发一个 Spring Boot 应用程序,并且有一个密码重置表单。我正在使用这样的类来验证输入。

public class PasswordResetForm {

    @NotEmpty
    @Size(min=6, message="must be at least 6 characters")
    private String password;

    private String passwordConfirm;

    //Getter and Setters
}
Run Code Online (Sandbox Code Playgroud)

因此,我现在想要验证字段“passwordConfirm”和“password”是否相等,我进行了全面搜索,但找不到如何在这种情况下添加自定义验证。那么,如何为其他字段添加自定义验证呢?

我的控制器的动作看起来像这样

@RequestMapping(value = "/password-change/{id}-{tokenNumber}", method = RequestMethod.POST)
public String changePassword(@PathVariable String id, @PathVariable String tokenNumber, @Valid PasswordResetForm form, BindingResult formBinding, Model model) {

    if (formBinding.hasErrors())
        return "change-password";

    //Other stuff
}
Run Code Online (Sandbox Code Playgroud)

Jav*_*ano 5

或者如果您只想验证这种情况(passwordConfirm 和密码相等)。

您可以使用@AssertTrue。

@AssertTrue
public boolean isDifferentPass() {
    return !password.equals(passwordConfirm);
}
Run Code Online (Sandbox Code Playgroud)

如果这两个字段相同,那么您的控制器的 BindingResult 有错误

  • `@AssertTrue` (和​​ `@AssertFalse`)对我有用!无论如何,我建议将此表达式更改为更简单的表达式(在表达式中进行不必要的布尔链接):`@AssertTrue public boolean isEqualPass() { return password.equals(passwordConfirm); }` (2认同)