@NotNull、@NotEmpty、@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;


目录
相关文章
|
6月前
|
SQL 安全 Java
resultMap 与 resultType、parameterMap 与 parameterType的区别
resultMap 与 resultType、parameterMap 与 parameterType的区别
91 0
关于@NotNull 注解中groups 的使用
关于@NotNull 注解中groups 的使用
1198 0
关于@NotNull 注解中groups 的使用
我应该使用 NULL 还是 0?
我应该使用 NULL 还是 0?
|
SQL Java 数据库连接
ResultMap与ResultType的区别
ResultMap与ResultType的区别
ResultMap与ResultType的区别
The Sandwich Rule
目标:训练一个可以直接以任意宽度运行的单一网络。其实是在权重共享的条件下,我们可以根据不同的硬件设备挑选不同宽度的网络,不再重训练一个权重。
119 0
The Sandwich Rule
|
存储 Java 索引
Nullable
Nullable
94 0
Caused by: 元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,globa
在Struts-2.3的配置文件struts.xml中,Caused by: 元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-exception-mappings?,action*)"。
1307 0
|
Web App开发 前端开发 JavaScript
gulp
gulp 1. 安装 npm install --g gulp 2. 初始化 npm init 3.
1087 0
|
JavaScript 前端开发