保存数据---参数校验@valid

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格式
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值