SpringBoot_@Valid注解实现变量验证

前言

以手机号格式的校验为例:包括是否为空,位数是否为11位,和手机号数字格式


一、@Valid介绍

@Valid 注解通常用于对象属性字段的规则检测

在这里插入图片描述

二、使用步骤

1.引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

2.定义约束

代码如下(示例):

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PhoneNum {
    @NotBlank(message = "电话不能空")
    @Size(min = 11, max = 11, message = "手机号码长度不正确")
    @Pattern(regexp = "^(((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[6])|(17[0135678])|(18[0-9])|(19[89]))\\d{8})$", message = "手机号格式错误")
    private String phone;
    
  //其他数据
}

3.处理异常

不满足规则条件会抛出MethodArgumentNotValidException异常,我们需要捕捉处理这个异常

@ControllerAdvice
@Slf4j
public class GlobalException {

   ///手机号格式异常处理
    @ResponseBody
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResultJson exceptionHandler(MethodArgumentNotValidException e)
    {
        log.error(e.getMessage(),e);
        return ResultJson.error(ResultCode.SMS_ERROR_CODE.getCode(),e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining()));
    }
全局异常处理
 @ExceptionHandler(Exception.class)
    @ResponseBody
    public Object labRunException(Exception e) {
        log.error(e.getMessage(),e);
        if(!HttpContextUtils.isAjax()){
            ModelAndView mv = new ModelAndView();
            mv.setViewName("/unknown");
            return mv;
        }else{
            return ResultJson.error(e.getMessage());
        }
    }
 }

异常匹配类型有就近原则,但是这两个异常要放在一个异常类中,否则会按照装配顺序执行,不一定会抛出目标异常

4 .Controller层方法测试

必须加@Valid注解

@RequestMapping("phone")
    public ResultJson setPhoneNum(
            @Valid @RequestBody
                    PhoneNum phoneNum)
    {
        System.out.println(phoneNum.getPhone());
        return ResultJson.ok(phoneNum);
    }

ResultJson自定义返回前端的格式


待改进:没有返回具体未满足的条件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值