【SpringBoot框架篇】26.集成spring-boot-starter-validation对接口参数校验
程序开发
2023-09-03 12:55:39
文章目录
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.boot spring-boot-starter-validation
2.2.常用注解
以下注解都支持通过message字段自定义错位提示信息,例如 @NotEmpty(message=“账号不能为空”)
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框架篇】其它文章如下,后续会继续更新。
标签:
相关文章
-
无相关信息