我正在嘗試使用 Hibernate Validator 創建自定義約束。如果我使用標準的,例如@Size,它運行良好并且我收到錯誤訊息。但是,我的自定義方法不起作用,我不知道為什么。
這是我的代碼:
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = TestValidateur.class)
public @interface ObjectValid {
String message() default "test";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
和:
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class TestValidateur implements ConstraintValidator<ObjectValid , String> {
public void initialize(ObjectValid constraintAnnotation) {
}
public boolean isValid(String NoObject, ConstraintValidatorContext ctx) {
return false ;
}
}
@Column(name="NoObject")
@ObjectValid
@Size(min = 4, max = 14)
public String NoObject;
并測驗驗證:
import java.io.FileNotFoundException;
import java.util.Set;
import javax.persistence.EntityManager;
import org.hibernate.mapping.Component;
import org.hibernate.validator.HibernateValidator;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
public class NoTest {
private static Validator validator;
public static void main(String[] args) throws FileNotFoundException, NoSuchMethodException, SecurityException {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Object objectVerif = new Object("ss");
Set<ConstraintViolation<Object>> validationErrors = validator.validate(objectVerif);
if(!validationErrors.isEmpty()){
for(ConstraintViolation<Object> error : validationErrors){
System.out.println(error);
}
}
}
}
如果我運行該應用程式,我只會收到@Size 的錯誤訊息
ConstraintViolationImpl{interpolatedMessage='la taille doit être comprise entre 4 et 14', propertyPath=NoObject, rootBeanClass=class tp03.Object, messageTemplate='{jakarta.validation.constraints.Size.message}'}
如果有人知道我遺漏了什么,我將不勝感激
謝謝你
驗證物件:
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Null;
import jakarta.validation.constraints.Size;
@Entity
@Table(name="object",indexes = { @Index(name="primary",columnList = "idObject")})
public class Object {
@Id
@GeneratedValue
@Column(name="idObject")
private int idObject;
public int getidObject()
{
{return idObject;}
}
public void SetidObject(int idObject)
{
this.idObject=idObject;
}
@Column(name="NoObject")
@ObjectValid
@Size(min = 4, max = 14)
public String NoObject;
public String getNoObject()
{
{return NoObject;}
}
public void SetNoObject(String NoObject)
{
this.NoObject=NoObject;
}
public Object(String NoObject)
{this.NoObject=NoObject;
}
}
uj5u.com熱心網友回復:
這里的問題javax.validation.Constraint是 用于定義自定義約束,但jakarta.validation.Validator用于執行驗證,然后只驗證jakarta.validation.Constraints。
如果在約束介面和類中將匯入從 更改javax為jakarta,則兩個約束都將得到正確驗證。ObjectValidTestValidateur
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/370637.html
上一篇:如何在回應物體中傳遞多個引數
