文章目录
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)长度是否在给定的范围之内 |
带注解的元素必须是电子邮箱地址 | |
@URL | 字符串必须是一个URL |
@AssertFalse | boolean值必须为false |
@AssertTrue | boolean值必须为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上帮我点下 Star
【SpringBoot框架篇】其它文章如下,后续会继续更新。
- 1.搭建第一个springboot项目
- 2.Thymeleaf模板引擎实战
- 3.优化代码,让代码更简洁高效
- 4.集成jta-atomikos实现分布式事务
- 5.分布式锁的实现方式
- 6.docker部署,并挂载配置文件到宿主机上面
- 7.项目发布到生产环境
- 8.搭建自己的spring-boot-starter
- 9.dubbo入门实战
- 10.API接口限流实战
- 11.Spring Data Jpa实战
- 12.使用druid的monitor工具查看sql执行性能
- 13.使用springboot admin对springboot应用进行监控
- 14.mybatis-plus实战
- 15.使用shiro对web应用进行权限认证
- 16.security整合jwt实现对前后端分离的项目进行权限认证
- 17.使用swagger2生成RESTful风格的接口文档
- 18.使用Netty加websocket实现在线聊天功能
- 19.使用spring-session加redis来实现session共享
- 20.自定义@Configuration配置类启用开关
- 21.对springboot框架编译后的jar文件瘦身
- 22.集成RocketMQ实现消息发布和订阅
- 23.集成smart-doc插件零侵入自动生成RESTful格式API文档
- 24.集成FastDFS实现文件的分布式存储
- 25.集成Minio实现文件的私有化对象存储
- 26.集成spring-boot-starter-validation对接口参数校验
- 27.集成mail实现邮件推送带网页样式的消息
- 28.使用JdbcTemplate操作数据库
- 29.Jpa+vue实现单模型的低代码平台
- 30.使用sharding-jdbc实现读写分离和分库分表
- 31.基于分布式锁或xxx-job实现分布式任务调度
- 32.基于注解+redis实现表单防重复提交
- 33.优雅集成i18n实现国际化信息返回
- 34.使用Spring Retry完成任务的重试