我正在使用 ConstraintValidator 實作來驗證字符是否高于 application.properties 中定義的某個高度,并且我遇到了一個問題,即帶有 @Value 的欄位 minimumHeight 始終為空。我也嘗試過建構式注入,但它給出了如下錯誤:
java.lang.NoSuchMethodException: com.miquido.Validator.CharacterValidator.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3585) ~[na:na]
at java.base/java.lang.Class.getConstructor(Class.java:2271) ~[na:na]
at org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:41) ~[hibernate-validator-6.2.3.Final.jar:6.2.3.Final]
這是我的驗證器:
import org.springframework.beans.factory.annotation.Value;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class CharacterValidator implements ConstraintValidator<ValidCharacter, Long> {
@Value("${character.minimum}")
private Long minimumHeight;
@Override
public boolean isValid(Long value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
formatMessage(context);
return value >= minimumHeight;
}
private void formatMessage(ConstraintValidatorContext context) {
String msg = context.getDefaultConstraintMessageTemplate();
String formattedMsg = String.format(msg, this.minimumHeight);
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(formattedMsg)
.addConstraintViolation();
}
}
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CharacterValidator.class)
public @interface ValidCharacter {
String message() default "Character must be higher than %s";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
編輯 我已經按照@antey13 的建議編輯了我的代碼,但 minimumHeight 仍然為空。
uj5u.com熱心網友回復:
移除建構式并添加通用引數 ConstraintValidator<ValidCharacter, String>。確保您使用的是spring驗證(spring-boot-starter-validation for spring boot),因為在另一種情況下@Value將不起作用,因為spring不會知道您的驗證器類
uj5u.com熱心網友回復:
嘗試添加@Component類CharacterValidator
uj5u.com熱心網友回復:
你能檢查以下要點嗎?
- 檔案以正確的方式加載
- CharacterValidator 是 Spring 的一個 bean
- 該類具有正確的構造
- 存在初始化方法(這個問題中的錯誤似乎是針對這種方法的)
@Override
public void initialize(ContactNumberConstraint contactNumber) {
}
您可以點擊以下鏈接:
- https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-constraint-validator
- https://www.baeldung.com/spring-mvc-custom-validator
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/492228.html
上一篇:NgFor不顯示資料
