在项目执行真正业务代码前,一般都需要对于前端的入参值进行一轮的判断,而一般的做法是写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_-]+)+$")
@Size (容器大小,适用于数组,集合对象)
hibernate-validator Maven引用
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
推荐文章:
【代码规范神器】阿里巴巴Java开发规约IDE插件使用教程(P3C)