@Min验证字符串

时间:2015-11-16 12:31:35

标签: java validation annotations

@Minjavax.validation.constraints.Min)的javadoc中,它声明只能验证数值。

  

@Target(值= {METHOD,FIELD,ANNOTATION_TYPE,构造函数,PARAMETER})   @Retention(value = RUNTIME)@Documented @Constraint(validatedBy = {})   public @interface Min

     

带注释的元素必须是值必须更高或更高的数字   等于指定的最小值。

     

支持的类型是:

BigDecimal
BigInteger
byte, short, int, long, and their respective wrappers
     

请注意,由于舍入错误,不支持double和float   (某些提供商可能会提供一些近似支持)

     

null元素被认为是有效的

当我将注释添加到String时,它获取String的值并将其转换为BigDecimal,然后检查该值。好像String包含BigDecimal值。

问题:

  1. 这在哪里记录?
  2. 为什么Eclipse Mars不接受这个?
  3. 请参阅Eclipse(编译器)消息:

      

    javax.validation.constraints.Min约束支持以下类型:java.math.BigDecimal,java.math.BigInteger,byte,short,int,long及其各自的包装类型。

    Test.java

    import javax.validation.constraints.Min;
    
    public class Test {
      @Min(10)
      String quantity;
    }
    

    代码按预期工作。

1 个答案:

答案 0 :(得分:0)

您可能正在使用Hibernate Validator作为Bean Validation API的实现。引用its documentation

  

BigDecimal,BigInteger,byte,short,int,long和原始类型的相应包装器;另外由HV支持:任何子类型的CharSequence(由char序列表示的数值被评估),任何子类型的数字

正如您在问题中正确说明的那样,@Min注释的Bean验证规范并未要求实现者支持String(或CharSequence)。这只是一个Hibernate功能,可能无法与其他实现一起使用。

请注意,在appendix C of the spec中,会出现以下内容:

  

持久性提供程序应该可以选择识别并尝试应用   以下约束:

     
      
  • @Min / @Max on numeric columns(TODO String too?)
  •