素材巴巴 > 程序开发 >

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

程序开发 2023-09-03 12:55:39

文章目录

  • 3.项目配套代码
  • 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.添加依赖

            org.springframework.bootspring-boot-starter-validation
     

    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 {@NotBlankprivate String userName;@NotBlank@Length(min = 6,max = 12)private String password;@Valid@NotNull(message = "不能为空")private UserDetail userDetail;//省略get set 方法
     }
     public class UserDetail {@NotBlankprivate String address;@Max(60)@Min(18)@NotNullprivate 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.项目配套代码

    github地址

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

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


    标签:

    素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。