java自定义数据验证

  1. 背景: 笔者在工作中遇到问题如下:

开发文件模板 curd,在新建模板对象的时候对数据进行验证,其中有一个属性是文件名称,要求必须是excel文件类型。

  1. 解决思路:

一开始想着在controller层拿到对象后,属性get出来if else 判断走起,感觉略有不妥,于是乎想着自定义一个数据验证注解来用用,专门用来判断文件类型的。核心思想无非就是拿到文件后缀名进行和预设的类型比较。


  1. 实现

自定义注解FileType

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Constraint(validatedBy = {FileTypeValidator.class})//指定校验器类
@Documented
@Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface FileType {
	String message() default "文件类型不允许";
	Class<?>[] groups() default {};
	Class<? extends Payload>[] payload() default {};
	String[] value();
}

实现自定义校验器FileTypeValidator

public class FileTypeValidator implements ConstraintValidator<FileType, String> {
	private List<String> fileNames = new ArrayList<>();
	@Override
	public void initialize(FileType constraintAnnotation) {
		fileNames = Arrays.asList(constraintAnnotation.value());
	}
	@Override
	public boolean isValid(String value, ConstraintValidatorContext context) {
		
		return StringUtils.isNotBlank(value) && //不能为空
				value.lastIndexOf(".")>0 &&	 //要有. 不能以.开头
				value.length()-1>value.lastIndexOf(".") && //不能以.结尾
				fileNames.contains(value.substring(value.lastIndexOf(".")+1));
	}
}

使用 ,在使用到该model时,如需要使用验证需使用注解: @Valid启用

public class VoucherTemplateModel {
    @ApiModelProperty("excel路径")
    @FileType(value = {"xls","xlsx"})
    private String excelUrl;
}

如有不妥,请多指正。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值