SpringBoot教程二自定义实现的参数校验器,可注解通用所有模块

目录

前言

自定义实现的参数对象校验举例

 自定义注解类@AllowEmptyLength实现自定义校验规则

AllowEmptyLengthValidator实现这个自定义校验注解拦截功能可以实例化校验

具体的实现java代码如下


前言

针对前面一篇文章说的,除了SpringBoot自带的一些校验注解,其实不能满足业务场景需要的,因为在开发过程中基本上,入参都是一个对象类,而不是一个参数,这样往下传递的,所以这样的场景,需要考虑到底是怎么样的传递来的。针对对象里面的参数我们如何实现自己的一个校验参数注解,自己自定义的实现,可以添加一个注解基于可以的实现所有的对象参数。这样应用通用性超级友好。维护性也很简单。定义也很简单。

自定义实现的参数对象校验举例

可以在前端接收到的对象参数进行添加注解即可的,主要的实现是如何定义以及实现这些注解,比如下面接受前端传来的一个通知对象,那么里面的参数基本上都是需要进行合格话校验的。

@Data
public class EventNoticeRequestVO implements Serializable {

    @NotNull(message = "通知接收人ID不能为空")
    private Integer receiverId;

    @NotBlank(message = "通知信息不能为空")
//    @Length(max = 500, message = "通知信息最多不超过500个字")
    private String noticeMessage;

    @AllowEmptyLength(max = 300, message = "跳转URL最多不超过300个字符")
    private String url;

}
@AllowEmptyLengthValidator这个注解其实是自定义是实现的,那么这个注解是怎么实现和自定义的马?

 自定义注解类@AllowEmptyLength实现自定义校验规则

这样既可以我这边使用,其他开发员,可以直接的使用这个注解皆可以的。通用型极高!

注解类的实现如下

@Constraint(validatedBy = { AllowEmptyLengthValidator.class })
@Documented
@Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface AllowEmptyLength {
	
	int min() default 0;

	int max() default Integer.MAX_VALUE;
	
	String message() default "长度不合法";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

AllowEmptyLengthValidator实现这个自定义校验注解拦截功能
可以实例化校验

注解使用功能怎么样生效的呢?下面这个映射类就可以的,需要继承实现

ConstraintValidator

具体的实现java代码如下


import org.apache.commons.lang3.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class AllowEmptyLengthValidator implements ConstraintValidator<AllowEmptyLength, String> {

	private int min;
	private int max;

	@Override
	public void initialize(AllowEmptyLength arg0) {
		this.min = arg0.min();
		this.max = arg0.max();
	}

	@Override
	public boolean isValid(String arg0, ConstraintValidatorContext arg1) {
		if (StringUtils.isBlank(arg0)) {
			return true;
		}
		int strLen = arg0.trim().length();
		if (strLen < min || strLen > max) {
			return false;
		}
		return true;
	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长-行则将至-行而不辍-未来可期

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值