hibernate-validator

简介

validator,翻译过来,就是“验证器”的意思。它是一种注解式参数校验,包名为javax.validation.Validator;

所谓注解式参数校验,是指通过给需要校验的(每个自定义类型对象的)对应属性添加注解,来完成指定校验。比如给属性添加注解@NotNull,程序会在在业务逻辑的代码中调用validator.validate(指定类型的对象)时,自动检查带有该注解的属性,检查这些属性是否为空值。这篇博客中有非常详细的说明。

各种注解

给属性添加的注解,如下图所示,很详细,也可以看这篇博客
在这里插入图片描述

好处

正常情况下(未使用hibernate-validator),如果用户调用你开发的接口时,未按你的要求传入参数,比如遗漏了自定义类型对象的些许属性,程序会直接报错,因为无法构造要传入接口的参数对象,如下图所示。
在这里插入图片描述

而使用了validator.validate进行参数校验的接口,不仅不会报错,程序正常运行,给用户返回200信息,还会提示错误发生的原因和位置,如下图所示。
在这里插入图片描述

validator.validate方法

业务逻辑代码中检查传入的参数时

首先需要在代码中的接口传入参数的位置上,给参数添加@Validated注解;

自认,待进一步确认
注意,需要给每一个添加了validator各种检查注解的类型添加@Validated注解,
比如,在自己自定义类型中,使用了枚举类型的属性,那么就需要在该枚举类型的声明处,添加@Validated注解。如下所示。

public class DeliveryfileEntity {

	@NotNull(message = "紧急程度不能为空")
	private urgencydegree urgencydegree;

	@Validated
	enum urgencydegree{

		UnurgentMail("1"),urgentMail("2");
		
		String code;
		
		private urgencydegree(String code) {
			// TODO Auto-generated constructor stub
			this.code = code;
		}
	}

然后,在需要检验参数的地方,调用validator.validate方法,来通过validator类实现对应注解的检查,如下所示。

public ResponseMessage<?> deliveryPaperfile(@RequestBody @ApiParam(name="投递记录对象") @Validated DeliveryfileEntity deliveryfileEntity) {
        Set<ConstraintViolation<JeecgDemoEntity>> failures = validator.validate(jeecgDemo);
		if (!failures.isEmpty()) {
			return Result.error(JSONArray.toJSONString(BeanValidators.extractPropertyAndMessage(failures)));
		}

为传入的参数类型中各个属性添加注解

自定义类型DeliveryfileEntity中的各个属性添加指定注解,这样在代码validator.validate时,才会检查这些标有注解的参数,并依据注解检查相应的内容,如下所示。

public class DeliveryfileEntity {
	//交换码
	@NotNull
	private String exchangecode;
	//发文字号
	@NotNull
	private String issuednumber;
	//紧急程度
	@NotNull
	private String urgencydegree;
	//文件编号
	@NotNull
	private String filecode;
	//文件标题
	@NotNull
	private String filetitle;
	//文件类别
	@NotNull
	private String filetype;
	//箱门编号
	@NotNull
	private String boxnumber;
	//取件码
	@NotNull
	private String pickcode;
	//操作人姓名
	@NotNull
	private String operatorName;
	//操作人所属公司
	@NotNull
	private String sysCompanyCode;

@NotNull、@NotBlank、@NotEmpty间的区别

@NotNull 被注释的元素不能为null, 用在基本类型上?
@NotBlank 用在String上面?
@NotEmpty 被注释的字符串必须非空,用在集合类上面?
关于判空属性,有博客这样说,待确认。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值