后端验证:@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的主要内容,如果未能解决你的问题,请参考以下文章
@Validated注解无效,以及嵌套对象属性的@NotBlank无效问题
@NotNull,@NotEmpty,@NotBlank区别