1、如何更加优雅的完成参数保存时,非空、非null、年龄、参数范围的校验?
答案:目前了解的有两种方式
(1)使用lombok注解(不介绍)
(2)使用valid注解(主角)
目的就是对于前端信息录入时,出于谨慎的态度,我们不光光要在前端进行判断,同样我们后端也应对于某些数据进行严格的判断。
基本的使用场景就不介绍了:
上代码,加注解喽!!!!!!!!!!!!!
类似这样的代码是不是经常遇到?
if (StringUtils.isEmpty(queProp) || StringUtils.isEmpty(queType)) {
return R.error(500, "题目类型或属性不能为空");
}
目前由于校验数据较少,当邮箱、身份证、手机号等等信息铺面而来时,我的天!!赶紧给我的双手上按摩。
那么正题来了!
public class Student{
@NotNull
(message ="传入的姓名为null,请传值")
@NotEmpty(message ="传入的姓名为空字符串,请传值")
private String name;
// 姓名
@NotNull(message ="传入的分数为null,请传值")
@Min(value =0,message ="传入的学生成绩有误,分数应该在0~100之间")
@Max(value = 100,message ="传入的学生成绩有误,分数应该在0~100之间")
private Integer score;
// 分数
@NotNull(message = "传入的电话为null,请传值")
@NotEmpty(message ="传入的电话为空字符串,请传值")
@Length(min =11, max =11, message ="传入的电话号码长度有误,必须为11位")
private String mobile;
// 电话号码
}
非空、非null的注解加上,那么你能偷懒划水的时间,又能挤出来了,
但是注意了,这样就可以了吗???
非然!
public R addSave(@RequestBody @Valid Student student, BindingResult bindingResult) {
try {
if(bindingResult.hasErrors()){
return R.error(500,bindingResult.getFieldError().getDefaultMessage())
// return R.error(500,"请检查填入信息是否完整");
}
{
"msg": "传入的姓名为null",
"code": 500
}
异常信息出来了,有没有!!
当然你以为获取异常信息的方式只有这种,手动传参bindingResult这种方式?
不可能的啦!
难道你忘记了统一异常信息处理类了???
@ControllerAdvice
@ResponseBody
public class GlobalExceptionIntercption(){
@ExceptionHandler(value=Exception.class)
public R getExceptionMessage(HttpServletRequest req,Exception e){
String failMsg=null;
if(e instance of MethodArgumentValidException ){
failMsg=(MethodArgumentValidException)e.getBindResult().getFiledError().getDefaultMessage();
}
}
}
maven依赖如下:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
限制 说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式