后端验证:@NotNull、 @NotBlank、 @length

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后端验证:@NotNull、 @NotBlank、 @length相关的知识,希望对你有一定的参考价值。

参考技术A 1.如果前端表单没有填写,默认传输的是空白字符串,可以通过@NotNull验证,但不能通过@NotBlank验证

2.如果@length规定最小长度大于0 ,可以代替@NotBlank

@NotNull@NotEmpty@NotBlank的区别

@NotEmpty用在集合类

@NotBlank 用在String

@NotNull 用在基本类型

源码

@NotEmpty

package javax.validation;

import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * Marks a property, method parameter or method return type for validation cascading.
 * <p>
 * Constraints defined on the object and its properties are be validated when the
 * property, method parameter or method return type is validated.
 * <p>
 * This behavior is applied recursively.
 *
 * @author Emmanuel Bernard
 * @author Hardy Ferentschik
 */
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
public @interface Valid {
}

加了@NotEmpty的String类、Collection、Map、数组,是不能为null并且长度必须大于0的(String、Collection、Map的isEmpty()方法)。

@NotBlank

/** Validate that the annotated string isnot {@code null} or empty.  The difference to {@code NotEmpty}is that trailing whitespaces are getting ignored. @author Hardy Ferentschik 
***/
@Documented
@Constraint(validatedBy = { })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR,PARAMETER })
@Retention(RUNTIME)
@ReportAsSingleViolation
@NotNull
public @interface NotBlank {
   String message() default "{org.hibernate.validator.constraints.NotBlank.message}";

@NotBlank用于String类型

和 @NotEmpty不同的是,尾部空格被忽略,也就是说,纯空格的String也是不符合规则的。所以才会说@NotBlank用于String,只能作用在String上,不能为null,而且调用trim()后,长度必须大于0。

(“test”) 即:必须有实际字符

@NotNull

/***  The annotated element must not be {@code null}. Accepts any type. 
@author Emmanuel Bernard 
**/
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { })
public @interface NotNull {
   String message()  default "{javax.validation.constraints.NotNull.message}";  
   Class<?>[] groups() default { };

这个就很好理解了,不能为null,但可以为empty。

examples:

1.String name = null;
@NotNull: false
@NotEmpty:false
@NotBlank:false

2.String name = "";
@NotNull:true
@NotEmpty: false
@NotBlank: false

3.String name = " ";
@NotNull: true
@NotEmpty: true
@NotBlank: false


4.String name = "Great answer!";
@NotNull: true
@NotEmpty:true
@NotBlank:true

附上一个使用例子:

@NotBlank(message = "startTime must not be null")
private String startTime;

@NotBlank(message = "endTime must not be null")
private String endTime;

@NotNull(message = "areaType must not be null")
private Integer areaType;

@NotBlank(message = "userId must not be null")
private String userId;

以上是关于后端验证:@NotNull、 @NotBlank、 @length的主要内容,如果未能解决你的问题,请参考以下文章

浅谈判空注解(@NotNull与@NotBlank)

@Validated注解无效,以及嵌套对象属性的@NotBlank无效问题

@NotNull,@NotEmpty,@NotBlank区别

@NotNull@NotEmpty@NotBlank的区别

@notnull @notempty @notblank区别

@NotNull,@NotBlank和 @NotEmpty使用