使用JSR303请求约束可以有效地约束用户提交的数据,减少无效数据的处理。下面是在Spring中使用JSR303请求约束判空的实现攻略:
1. 添加依赖
首先需要在Maven或Gradle中添加JSR303和Hibernate Validator的依赖,例如:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>
</dependency>
2. 定义约束类
可以在JavaBean中定义各种约束规则,例如:
public class User {
@NotNull
private String name;
@Min(18)
private int age;
@Email
private String email;
// getters and setters
}
在这个例子中,要求name不能为空,age要大于等于18,email必须符合邮箱格式。
3. 使用注解约束请求参数
在Controller中使用注解对请求参数进行约束,例如:
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/save")
public String saveUser(@Valid User user, BindingResult result) {
if(result.hasErrors()) {
return result.getFieldErrors().toString();
}
// 保存用户
return "success";
}
}
在这个例子中,使用@Valid注解对User对象进行约束,如果有错误,抛出BindingResult异常到前端。
4. 处理异常
在前端可以使用统一异常处理器对BindingResult异常进行处理,例如:
@RestControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(BindingResultException.class)
public String handleValidateException(BindingResultException e) {
BindingResult result=e.getResult();
StringBuilder stringBuilder=new StringBuilder();
for(FieldError fieldError:result.getFieldErrors()){
stringBuilder.append(fieldError.getDefaultMessage()).append(";");
}
return stringBuilder.toString();
}
}
在这个例子中,对BindingResult异常进行处理,返回所有错误信息的拼接字符串。
示例1:约束请求必须有参数
public class User {
@NotNull(message="name不能为空")
private String name;
}
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/save")
public String saveUser(@RequestBody @Valid User user, BindingResult result) {
if(result.hasErrors()) {
return result.getFieldErrors().toString();
}
// 保存用户
return "success";
}
}
在这个例子中,@NotNull注解用于约束name必须有值,如果没有,返回错误信息"name不能为空"。
示例2:约束请求参数值必须在指定范围内
public class User {
@NotNull(message="name不能为空")
private String name;
@NotNull(message="age不能为空")
@Min(value=18,message="年龄必须大于等于18")
@Max(value=60,message="年龄必须小于等于60")
private int age;
@Email(message="邮箱格式不正确")
private String email;
}
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/save")
public String saveUser(@RequestBody @Valid User user, BindingResult result) {
if(result.hasErrors()) {
return result.getFieldErrors().toString();
}
// 保存用户
return "success";
}
}
在这个例子中,@Min和@Max注解用于约束age必须在18到60之间,如果不再这个范围内,返回错误信息"年龄必须大于等于18"或"年龄必须小于等于60"。@Email注解用于约束email必须是邮箱格式,如果不是返回错误信息"邮箱格式不正确"。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring中使用JSR303请求约束判空的实现 - Python技术站