使用Java、hibernate validator注解校验入参,格式化出参(入参)

时间:2022-06-04 21:10:50

在项目执行真正业务代码前,一般都需要对于前端的入参值进行一轮的判断,而一般的做法是写if语句进行值的判断,如下例子

public boolean insertOneUser(String name, int age) {
		if (name == null || name == "") {
			System.out.println("请输入名称");
			return false;
		}
		if (age < 0) {
			System.out.println("年龄不能低于0");
			return false;
		}
		System.out.println("执行插入sql");
		return true;
	}

对于此例子,我们真正的业务是要插入一个用户记录;而当前在执行插入之前,使用了两个if语句进行入参值的判断,导致校验代码行远大于真正的业务代码行。对于入参值,建议使用java注解的方式进行校验。


把name,age提取到一个入参类InsertOneUserPO里面(省略字段get,set方法)

public class InsertOneUserPO {
	@NotBlank(message = "请输入名称")
	private String name;
	@Min(message = "年龄不能低于0", value = 0)
	@NotNull(message = "请输入年龄")
	private Integer age;
}

name字段加hibernate.validator包下面的@NotBlank做字符串非空判断;age字段加javax.validation包下面的@Min以及@NotNull校验入参值非空以及最小值判断


此时业务代码就能够专心做真正的业务操作了

public boolean insertOneUser(@Valid InsertOneUserPO po) {
		System.out.println("执行插入sql");
		return true;
	}
注:框架默认不对入参类的校验注解进行处理,需要在入参类钱加入javax.validation包下面的@Valid注解,告诉框架在执行业务代码之前,先处理入参类的校验注解。如果校验不通过(例:age输入-1提交),则会抛出异常,业务代码则不会执行;如果入参字段值都校验通过,则执行业务逻辑代码。


常用的入参校验注解

@NotNull (空对象null)

@NotBlank (空字符串)

@Min  (最小数值)

@Max  (最大数值)

@Length (字符长度)

@Pattern  (正则表达式)

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")      (前端传yyyy-MM-dd HH:mm:ss标准时间格式转Date类型)

@Email(message = "邮箱格式不正确", regexp = "^[\\.a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$")

hibernate-validator Maven引用

<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>5.2.4.Final</version>
</dependency>

推荐文章:

【代码规范神器】阿里巴巴Java开发规约IDE插件使用教程(P3C)

Eclipse新建Spring-boot项目,打包部署并输出HelloWord

MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件