我有一個 java spring boot 專案,我想在其中驗證匹配的密碼并在 json 回應中顯示錯誤。
public interface SecurityCredentialsRequest {
String getPassword();
String getPasswordConfirmation();
}
@Getter
@Setter
@PasswordConfirmation
public class UserSignUpRequest implements SecurityCredentialsRequest {
//...
@UniqueEmailUserSignup
private String email;
private String password;
private String passwordConfirmation;
}
驗證器:
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PasswordConfirmationValidator.class)
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Documented
public @interface PasswordConfirmation {
String message() default "The password and its confirmation do not match.";
Class[] groups() default {};
Class[] payload() default {};
}
@Component
public class PasswordConfirmationValidator implements ConstraintValidator<PasswordConfirmation, SecurityCredentialsRequest> {
@Override
public void initialize (final PasswordConfirmation constraintAnnotation) {
}
@Override
public boolean isValid(SecurityCredentialsRequest securityCredentialsRequest, ConstraintValidatorContext constraintValidatorContext) {
String password = securityCredentialsRequest.getPassword();
String passwordConfirmation = securityCredentialsRequest.getPasswordConfirmation();
return password != null && password.equals(passwordConfirmation);
}
}
類級別的驗證器被呼叫,但回應負載中不包含錯誤訊息。當我使用在屬性 ( @UniqueEmailUserSignup)上使用的其他自定義驗證器時,錯誤訊息如下所示。passwordConfirmation雖然缺少訊息。
{
"timestamp": "2021-11-05T14:57:56.2488041",
"errors": [
{
"code": 775,
"field": "email",
"message": "An account with the specified email already exists."
}
]
}
物體通過@Valid控制器函式中的注釋進行驗證。
@PostMapping(path = PATH)
public ResponseEntity<UserAccountDataResponse> doUserSignUp(@RequestBody @Valid UserSignUpRequest userSignUpRequest) {
//...
}
我如何確保自定義 ConstraintValidator 的錯誤訊息也包含在錯誤回應中?
uj5u.com熱心網友回復:
我找到了解決方案。它缺少屬性路徑,因此被忽略。添加這個解決了這個問題:
constraintValidatorContext.buildConstraintViolationWithTemplate(constraintValidatorContext.getDefaultConstraintMessageTemplate())
.addPropertyNode("passwordConfirmation").addConstraintViolation();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/353172.html
上一篇:檢查輸入的長度并使用引導程式驗證
