java Spring中验证base64字符串的注解

nbysray5  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(132)

我有一个REST服务,我的请求体bean用javax.validation注解,比如@NotBlank @NotNull @Pattern等,在一个特定的字段中,我收到一个编码为string base64的文件,
那么,* 有注解吗,或者我怎么写一个自定义的验证注解,这样它就可以检查字符串是否真的是base64字符串?*
我只需要一个像这样的注解形式的验证:

try {
    Base64.getDecoder().decode(someString);
    return true;
} catch(IllegalArgumentException iae) {
    return false;
}

thnx提前

0s7z1bwu

0s7z1bwu1#

是的,您可以为它们编写自己的注解和验证器。
您的注解将如下所示:

@Documented
@Constraint(validatedBy = Base64Validator.class)
@Target( { ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface IsBase64 {
    String message() default "The string is not base64 string";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

约束验证器javax.validation实现(我在这里使用您的代码进行实际验证):

public class Base64Validator implements ConstraintValidator<IsBase64, String> {
    
    @Override
    public boolean isValid(String value, ConstraintValidatorContext cxt) {
        try {
            Base64.getDecoder().decode(value);
            return true;
        } catch(IllegalArgumentException iae) {
            return false;
        }
    }
}

带注解字段的数据类示例:

@Data
public class MyPayload {
    @IsBase64
    private String value;
}

以及带有@Valid注解的控制器方法示例,需要:

@PostMapping
public String test(@Valid @RequestBody MyPayload myPayload) {
    return "ok";
}

酒店预订:另外,如果你想检查fiven字符串是否是base64字符串,你可以使用方法isBase64()从apache-commons libraby,类是org.apache.commons.codec.binary.Base64所以,它看起来像这样Base64.isBase64(str);

相关问题