【SpringBoot框架篇】26.集成spring-boot-starter-validation对接口参数校验

1.常规验证

以下面的登录接口为例,需要手动去验证参数是否存在,这种写法繁琐且不太优雅。

@RestController
public class LoginController {

    @RequestMapping("/login")
    public String test(@RequestBody User user){
        if(user.getUserName()!=null && user.getPassword()!=null){
            //查数据库验证逻辑省略
            System.out.println(user);
            return "登录成功";
        }else{
            return "参数不能为null";
        }
    }
}    

在这里插入图片描述

2.使用validation验证

2.1.添加依赖

        <!-- spring-boot 2.3及以上的版本需要引入包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

2.2.常用注解

以下注解都支持通过message字段自定义错位提示信息,例如 @NotEmpty(message=“账号不能为空”)

参数描述
@NotNull不能是Null
@Null必须是Null
@NotBlank字符串不能为空、空字符串、全空格
@NotEmpty带注解的元素不能是空,String类型不能为null,Array、Map不能为空,切size/length大于0
@Max数值必须小于等于指定的最大值
@Min数值必须大于等于指定的最小值
@Length(min=, max=)字符串的长度是否在给定的范围之内
@Size(min=, max=)验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Email带注解的元素必须是电子邮箱地址
@URL字符串必须是一个URL
@AssertFalseboolean值必须为false
@AssertTrueboolean值必须为true
@Pattern带注解的元素必须符合指定的正则表达式

2.3.在pojo类中添加需要使用的注解

以添加用户接口为例,验证提交的数据并对@Valid注解对UserDetail 对象里属性进行嵌套校验。

public class User {

    @NotBlank
    private String userName;

    @NotBlank
    @Length(min = 6,max = 12)
    private String password;

    @Valid
    @NotNull(message = "不能为空")
    private UserDetail userDetail;
	//省略get set 方法
}
public class UserDetail {

    @NotBlank
    private String address;
 
    @Max(60)
    @Min(18)
    @NotNull
    private Integer age; 
    //省略get set 方法
}    

2.4.在接口入参处添加@Valid

    @PostMapping("/save")
    public String loginValid(@Valid @RequestBody User user){
        System.out.println(user);
        return "保存成功";
    }

2.5.添加全局异常处理类返回校验错位提示信息

@ControllerAdvice
public class ControllerException {

    @ResponseBody
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Object handleValidException(MethodArgumentNotValidException e) {
        //将错误信息返回给前台
        String field, msg;
        StringBuilder sb = new StringBuilder();
        for (FieldError fieldError : e.getBindingResult().getFieldErrors()) {
            // 获取错误验证字段名
            field = fieldError.getField();
            msg = fieldError.getDefaultMessage();
            sb.append("参数名[").append(field).append("]").append(msg).append(",");
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

}

测试接口,可以看到添加的校验规则都生效了。
在这里插入图片描述

3.项目配套代码

gitee代码地址

创作不易,要是觉得我写的对你有点帮助的话,麻烦在gitee上帮我点下 Star

【SpringBoot框架篇】其它文章如下,后续会继续更新。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皓亮君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值