在项目执行真正业务代码前,一般都需要对于前端的入参值进行一轮的判断,而一般的做法是写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)