Null的Java注释,但既不是Empty也不是Blank

时间:2015-06-30 07:46:33

标签: java validation

是否有任何可以像下面的示例一样验证的java注释?

String test;
test = null; //valid
test = ""; //invalid
test = " "; //invalid
test = "Some values"; //valid

提前致谢

5 个答案:

答案 0 :(得分:10)

javax.validation或Hibernate Validator中都没有这样的注释。有一个request to add one to 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 { };
}

或将@Pattern注释与需要非空白字符的正则表达式一起使用(作为模式注释accepts nulls and does not match them against the pattern)。

答案 1 :(得分:8)

您需要创建自定义注释:@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 {};
}

然后是实际验证器: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;
    }
}

答案 2 :(得分:1)

哪里有一个不错的javax.validation.constraints.Pattern注释。

您可以使用以下注释字段:

@Pattern(regexp = "^(?!\\s*$).+", message = "must not be blank")

这将检查字段是否匹配正则表达式。正则表达式本身是某物但不是空白see details here)。它使用负前瞻。

答案 3 :(得分:0)

你试过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;

}

答案 4 :(得分:0)

最好的方法是创建自己的约束验证器,

$ServicePrincipalConnection = Get-AutomationConnection -Name 'AzureRunAsConnection'

Add-AzAccount -ServicePrincipal -TenantId $ServicePrincipalConnection.TenantId -ApplicationId $ServicePrincipalConnection.ApplicationId -CertificateThumbprint $ServicePrincipalConnection.CertificateThumbprint

$rgname ="rg-name"

$vmname ="vmName"

$ScriptToRun = "c:\temp\shutdown.ps1" #file exists in the VM
    
Invoke-AzVMRunCommand -ResourceGroupName $rgname -Name $vmname -CommandId 'RunPowerShellScript' -ScriptPath $ScriptToRun