下面我来给您讲解关于spring boot输入数据校验(validation)的实现过程的完整攻略。
1. 简介
Spring Boot提供了一种简单的方法来在Web应用程序中轻松实现输入数据的校验。它可以通过使用声明式注解进行实现,这些注解在处理表单输入时特别有用。
1.1 常用的校验注解
Spring Boot中常用的校验注解包括:
- @NotNull:验证对象不为空
- @NotBlank:验证字符串不为空字符串或null
- @NotEmpty:验证字符串、集合、map等不为空
1.2 实现方式
Spring Boot提供了两种校验方式:
- 使用注解实现
- 自定义实现
2. 使用注解实现
2.1 步骤
使用注解实现输入数据校验的步骤如下:
- 导入validation的starter
在pom.xml文件中添加以下依赖:
<!-- validation starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 创建校验实体类
在实体类中使用注解对字段进行校验,例如:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@NotBlank(message = "密码不能为空")
private String password;
@Email(message = "电子邮件地址格式不正确")
private String email;
// getter and setter 略去
}
- 添加校验逻辑
在Controller中使用@Valid注解对实体进行校验,例如:
@RestController
public class UserController {
@PostMapping("/users")
public String createUser(@Valid @RequestBody User user) {
// 处理用户逻辑
return "success";
}
}
2.2 示例
下面展示一个简单的使用注解实现输入数据校验的示例:
- 编写实体类
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@NotBlank(message = "密码不能为空")
private String password;
@Email(message = "电子邮件地址格式不正确")
private String email;
// getter and setter 略去
}
- 编写Controller
@RestController
public class UserController {
@PostMapping("/users")
public String createUser(@Valid @RequestBody User user) {
// 处理用户逻辑
return "success";
}
}
3. 自定义实现
3.1 步骤
自定义实现输入数据校验的步骤如下:
- 实现ConstraintValidator接口
public class AgeValidator implements ConstraintValidator<Age, Integer> {
private int max;
@Override
public void initialize(Age constraintAnnotation) {
this.max = constraintAnnotation.max();
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return value >= 0 && value <= max;
}
}
- 编写校验注解类
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {AgeValidator.class})
public @interface Age {
int max() default 100;
String message() default "年龄范围错误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
- 添加校验逻辑
在Controller中使用@Validated注解开启校验,例如:
@RestController
@Validated
public class UserController {
@PostMapping("/users")
public String createUser(@Validated @RequestBody User user) {
// 处理用户逻辑
return "success";
}
}
3.2 示例
下面展示一个简单的自定义实现输入数据校验的示例:
- 定义校验注解
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {AgeValidator.class})
public @interface Age {
int max() default 100;
String message() default "年龄范围错误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
- 实现ConstraintValidator接口
public class AgeValidator implements ConstraintValidator<Age, Integer> {
private int max;
@Override
public void initialize(Age constraintAnnotation) {
this.max = constraintAnnotation.max();
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return value >= 0 && value <= max;
}
}
- 编写实体类
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@NotBlank(message = "密码不能为空")
private String password;
@Email(message = "电子邮件地址格式不正确")
private String email;
@Age(message = "年龄范围错误")
private Integer age;
// getter and setter 略去
}
- 编写Controller
@RestController
@Validated
public class UserController {
@PostMapping("/users")
public String createUser(@Validated @RequestBody User user) {
// 处理用户逻辑
return "success";
}
}
以上就是使用注解实现和自定义实现输入数据校验的完整攻略,如有疑问请随时提出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot输入数据校验(validation)的实现过程 - Python技术站