是否有任何java注释可以像下面的示例一样进行验证?
String test;
test = null; //valid
test = ""; //invalid
test = " "; //invalid
test = "Some values"; //valid
Run Code Online (Sandbox Code Playgroud)
提前致谢
Jul*_*les 13
在javax.validation或Hibernate Validator中都没有这样的注释.有一个请求要向Hibernate Validator添加一个,但由于可以相对容易地编写自己的"不会修复"而被关闭.建议的解决方案是使用您自己的注释类型,如下所示:
@ConstraintComposition(OR)
@Null
@NotBlank
@ReportAsSingleViolation
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Constraint(validatedBy = { })
public @interface NullOrNotBlank {
String message() default "{org.hibernate.validator.constraints.NullOrNotBlank.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
Run Code Online (Sandbox Code Playgroud)
或者使用@Pattern带有正则表达式的注释,该表达式需要存在非空白字符(因为Pattern注释接受空值并且与模式不匹配).
veg*_*4me 11
您需要创建自定义注释: @NullOrNotBlank
首先创建自定义注释: NullOrNotBlank.java
@Target( {ElementType.FIELD})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = NullOrNotBlankValidator.class)
public @interface NullOrNotBlank {
String message() default "{javax.validation.constraints.Pattern.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)
那么实际的验证器: NullOrNotBlankValidator.java
public class NullOrNotBlankValidator implements ConstraintValidator<NullOrNotBlank, String> {
public void initialize(NullOrNotBlank parameters) {
// Nothing to do here
}
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if (value == null) {
return true;
}
if (value.length() == 0) {
return false;
}
boolean isAllWhitespace = s.matches("^\\s*$");
return !isAllWhitespace;
}
}
Run Code Online (Sandbox Code Playgroud)
通过使用javax.validation.constraints.Size无需创建自定义注释即可实现此目的
// Null values are considered valid
@Size(min=1) String test;
Run Code Online (Sandbox Code Playgroud)
然而,正如程序员指出的那样,诸如 之类的空白字符串" "被认为是有效的,但@NotBlank.
哪里有好的javax.validation.constraints.Pattern注释。
您可以使用以下方式注释该字段:
@Pattern(regexp = "^(?!\\s*$).+", message = "must not be blank")
Run Code Online (Sandbox Code Playgroud)
这检查字段是否与正则表达式匹配。正则表达式本身是一些东西,但不是空白(请参阅此处的详细信息)。它使用负前瞻。
bhd*_*drk -7
您尝试过Hibernate-Validator吗?我想这就是你正在寻找的。
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
public class MyModel {
@NotNull
private String str1;
@NotEmpty
private String str2;
@NotBlank
private String str3;
}
Run Code Online (Sandbox Code Playgroud)