Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将@Pattern与Float字段一起使用_Java_Spring_Validation - Fatal编程技术网

Java 将@Pattern与Float字段一起使用

Java 将@Pattern与Float字段一起使用,java,spring,validation,Java,Spring,Validation,在我当前的spring项目中,我尝试使用一个Float字段使用javax.validation.constraints中的注释模式,如下所示: @Pattern(regexp = "[0-9]{2}.[0-9]{2}") private Float preco; 但当尝试使用此字段插入或更新实体时,会出现以下错误: Caused by: javax.validation.UnexpectedTypeException: HV000030: No validator could be found

在我当前的spring项目中,我尝试使用一个Float字段使用javax.validation.constraints中的注释模式,如下所示:

@Pattern(regexp = "[0-9]{2}.[0-9]{2}")
private Float preco;
但当尝试使用此字段插入或更新实体时,会出现以下错误:

Caused by: javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Float.
        at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.verifyResolveWasUnique(ConstraintValidatorManager.java:218)
        at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.findMatchingValidatorClass(ConstraintValidatorManager.java:193)
        at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.getInitializedValidator(ConstraintValidatorManager.java:97)
        at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:125)
        at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91)
        at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:83)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:547)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:487)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:451)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:403)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:206)
        at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:137)
        at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:95)
        at org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:218)
        at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:97)
        at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)
        at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349)
        at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
        at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
        at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
        at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
        at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
        at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
        at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
我尝试将以下内容添加到我的项目中:

@Component
public class FloatEditor extends PropertyEditorSupport {
  @Override
  public void setAsText(String text) {
    if (!text.isEmpty()) {
      Float numero = Float.parseFloat(text);
      setValue(numero);
    }
  }
}
并将此行添加到我的控制器中的方法:

binder.registerCustomEditor(Float.class, new FloatEditor());

但同样的错误也会发生。有人知道如何实现这一点吗?

@Pattern
注释不能用于验证
Float
。您需要创建自定义验证器。请查找以下代码:

自定义验证程序注释:

@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = FloatValidator.class)
@Documented
public @interface FloatPattern {

    String message() default "Float contraint voilated";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}
测试类

Sample test = new Sample();
test.preco = 11.12f;

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Sample>> violations = validator.validate(test);

for (final ConstraintViolation<Sample> cons : violations) {
        System.out.println(cons.getMessage());
}
Float contraint voilated

@Pattern
注释不能用于验证
浮动
。您需要创建自定义验证器。请查找以下代码:

自定义验证程序注释:

@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = FloatValidator.class)
@Documented
public @interface FloatPattern {

    String message() default "Float contraint voilated";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}
测试类

Sample test = new Sample();
test.preco = 11.12f;

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Sample>> violations = validator.validate(test);

for (final ConstraintViolation<Sample> cons : violations) {
        System.out.println(cons.getMessage());
}
Float contraint voilated