日常项目开发中,对于前端提交的表单,java培训后台接口接收到表单数据后,为了程序的严谨性,通常后端会加入业务参数的合法校验操作来避免程序的非技术性bug,这里对于客户端提交的数据校验,SpringBoot通过spring-boot-starter-validation 模块包含了数据校验的工作。
表单校验的框架
JSR303/JSR-349::提供bean属性相关校验规则
JSR303/JSR-349: JSR303是一项标准,只提供规范不提供实现,规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,位于javax.validation.constraints包下。JSR-349是其升级版本, 添加了一些新特性。
第一步:环境配置
实现参数校验,程序必须引入spring-boot-starter-validation 依赖,只是在引入spring-boot- starter-web依赖时,该模块会自动依赖spring-boot-starter-validation,所以程序中引入spring-boot- starter-web 会一并依赖spring-boot-starter-validation到项目中。
第二步:在需要校验的实体类的属性上添加校验的规则
public class User {
private Integer uid;
@NotBlank(message = "用户名不能为空")
private String uname;
@NotBlank(message = "用户密码不能为空!")
@Length(min = 6, max = 10,message = "密码长度至少6位但不超过10位!")
private String upasswd;
省略了get/set方法...
}
第三步:在controller层中需要校验的方法参数旁加上@Valid注解
@PutMapping("user")
public String addUser(@RequestBody @Valid User user, BindingResult resul){
//如果传过来的参数与设置的规则不一致的话,则抛出异常(我这里是自定义异常)
if (resul.hasErrors()){
throw new ParamsException(400,resul.getFieldError().getDefaultMessage());
}
int save = userService.save(user);
if (save>0){
return "添加成功";
}else {
return "添加失败";
}
}
第四步:自定义异常处理参数校验不合格信息
public class ParamsException extends RuntimeException {
private Integer code=300;
private String msg="参数异常!";
public ParamsException() {
super("参数异常!");
}
public ParamsException(String msg) {
super(msg);
this.msg = msg;
}
public ParamsException(Integer code) {
super("参数异常!");
this.code = code;
}
public ParamsException(Integer code, String msg) {
super(msg);
this.code = code;
this.msg = msg;
}
省略了get/set方法
}
第五步,通过全局异常处理获取参数校验不满足的信息
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public String excetionHandlerTest(Exception e ) {
ParamsException exception=(ParamsException) e;
return exception.getMsg();
}
}
第六步,测试项目(通过postman测试)
参数校验都满足的情况:
参数校验不满足的情况:
出现以上情况,就证明我们的数据校验是可以的了。
转载于java学习
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。