SpringMVC之参数验证
SpringMVC之参数验证
目录
一、为什么使用参数验证
以下面的登录接口为例,需要手动去验证参数是否存在,这种写法繁琐且不太优雅。
@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";
}
}
}
1.1、参数验证作用
为了简化代码,所以首先来进行参数验证。
二、怎么使用参数验证
<!-- spring-boot 2.3及以上的版本需要引入包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.1、小结
有针对于数字、邮箱、时间、正则、对象(集合、字符串、布尔类型)
三、具体操作流程
3.1、在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 方法
}
3.2、在接口入参处添加@Valid
@PostMapping("/save")
public String loginValid(@Valid @RequestBody User user){
System.out.println(user);
return "保存成功";
}
3.3、添加全局异常处理类返回校验错位提示信息
@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.4、测试
测试接口,可以看到添加的校验规则都生效了。
从理论中来,到实践中去,最终回归理论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-10-09 springmvc之拦截器、异常处理、文件上传