0

我有以下的模型类的javax Bean验证:@Max和@Min不工作

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模型类测试类。

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个字符.::lname::Last name应该有至少5个字符。 名字应该小于10个字符。::fname::名字应该小于10个字符。

回答

2

这不是正确的注释。 @Min@Max用于BigDecimal,BigInteger,byte,short,int,long及其各自的包装纸。

请改用@Size。的javadoc提取物:

支持的类型包括:

  • 字符串(字符串长度evaludated)
  • 集(集合的大小进行评估)
  • 地图(地图大小进行评估)
  • 阵列(评估阵列长度)