Javax Bean验证:@Max和@Min无效

时间:2017-10-16 08:40:56

标签: java bean-validation hibernate-validator server-side-validation

我有以下模型类

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
public class Person {

    @Max(value = 10, message = "First name should be smaller than 10 characters.")
    private String fname;
    @Min(value = 5, message = "Last name should have atleast 5 characters.")
    private String lname;
    private String status;

    public Person(String fname, String lname, String status) {
        super();
        this.fname = fname;
        this.lname = lname;
        this.status = status;
    }

以下是我正在验证Person模型类的Test类。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Set;

import javax.validation.Configuration;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;


import the.bhushan.models.Person;

public class Test {

    public static void main(String[] args) throws FileNotFoundException {
        Test test = new Test();
        //test.byXML();
        test.byAnnotation();
    }

    private void byAnnotation() {
        ValidatorFactory validatorFactory = Validation
                .buildDefaultValidatorFactory();
        Validator validator = validatorFactory.getValidator();

        Person emp1 = new Person("Bhushan", "Patil", "A");
        Set<ConstraintViolation<Person>> validationErrors = validator
                .validate(emp1);

        if (!validationErrors.isEmpty()) {
            for (ConstraintViolation<Person> error : validationErrors) {
                System.out.println(error.getMessageTemplate() + "::"
                        + error.getPropertyPath() + "::" + error.getMessage());

            }
        }
    }}

即使fname字段的值只有7个字符长,它显示以下验证消息。

姓氏至少应包含5个字符。:::姓名:姓名应至少包含5个字符。 名字应小于10个字符。:: name ::名字应小于10个字符。

1 个答案:

答案 0 :(得分:6)

这不是正确的注释。 @Min@Max适用于BigDecimalBigIntegerbyteshortintlong及其各自的包装。

请改用@Sizejavadoc的摘录:

  

支持的类型是:

     
      
  • 字符串(字符串长度被评估)
  •   
  • 收集(评估收集大小)
  •   
  • 地图(评估地图大小)
  •   
  • 数组(评估数组长度)
  •