详解SpringBoot中的参数校验(项目实战)
在Spring Boot中,参数校验是一个非常重要的功能,它可以帮助我们在接口层面对请求参数进行校验,避免了一些不必要的错误和异常。本文将详细讲解Spring Boot中的参数校验功能,包括以下内容:
- 参数校验的基本概念
- Spring Boot中的参数校验实现方法
- 示例一:使用注解方式进行参数校验
- 示例二:使用自定义校验器进行参数校验
1. 参数校验的基本概念
参数校验是指在接口层面对请求参数进行校验,确保请求参数的合法性和正确性。在Spring Boot中,我们可以使用注解方式或自定义校验器的方式来实现参数校验。
2. Spring Boot中的参数校验实现方法
在Spring Boot中,我们可以使用注解方式或自定义校验器的方式来实现参数校验。以下是两种实现方法的详细介绍:
2.1 使用注解方式进行参数校验
使用注解方式进行参数校验是一种常用的方式,它可以帮助我们快速实现参数校验。以下是使用注解方式进行参数校验的实现方法:
- 在Controller层的方法参数上添加校验注解。例如:
@PostMapping("/user")
public User createUser(@Valid @RequestBody User user) {
// ...
}
在上面的代码中,我们在createUser()方法的参数上添加了@Valid注解,表示需要对该参数进行校验。在User类中,我们使用了一些校验注解,例如@NotNull、@Size等。
- 在User类中添加校验注解。例如:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@NotNull(message = "密码不能为空")
@Size(min = 6, max = 20, message = "密码长度必须在6-20个字符之间")
private String password;
// ...
}
在上面的代码中,我们在username和password属性上添加了@NotNull和@Size注解,表示这两个属性不能为空,并且密码长度必须在6-20个字符之间。
2.2 使用自定义校验器进行参数校验
使用自定义校验器进行参数校验是一种更加灵活的方式,它可以帮助我们实现更加复杂的校验逻辑。以下是使用自定义校验器进行参数校验的实现方法:
- 创建一个自定义校验器。例如:
public class PhoneValidator implements ConstraintValidator<Phone, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
return value.matches("^(13[0-9]|14[5-9]|15[0-3,5-9]|16[6]|17[0-8]|18[0-9]|19[1,8,9])\\d{8}$");
}
}
在上面的代码中,我们创建了一个名为PhoneValidator的自定义校验器,并实现了ConstraintValidator接口。在isValid()方法中,我们实现了手机号码的校验逻辑。
- 在需要进行校验的属性上添加自定义注解。例如:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@NotNull(message = "密码不能为空")
@Size(min = 6, max = 20, message = "密码长度必须在6-20个字符之间")
private String password;
@Phone(message = "手机号码格式不正确")
private String phone;
// ...
}
在上面的代码中,我们在phone属性上添加了@Phone注解,表示需要对该属性进行手机号码的校验。
- 在自定义注解上添加元注解。例如:
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {PhoneValidator.class})
public @interface Phone {
String message() default "手机号码格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
在上面的代码中,我们在@Phone注解上添加了@Constraint注解,并指定了PhoneValidator.class作为校验器。
3. 示例一:使用注解方式进行参数校验
以下是一个使用注解方式进行参数校验的示例:
- 创建一个名为User的类,并添加以下代码:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@NotNull(message = "密码不能为空")
@Size(min = 6, max = 20, message = "密码长度必须在6-20个字符之间")
private String password;
// ...
}
在上面的代码中,我们创建了一个名为User的类,并在username和password属性上添加了校验注解。
- 创建一个名为UserController的类,并添加以下代码:
@RestController
public class UserController {
@PostMapping("/user")
public User createUser(@Valid @RequestBody User user) {
// ...
}
}
在上面的代码中,我们创建了一个名为UserController的类,并在createUser()方法的参数上添加了@Valid注解,表示需要对该参数进行校验。
- 启动应用程序,并使用Postman等工具发送POST请求,请求体中包含username和password参数。如果参数不符合校验规则,应该会返回相应的错误信息。
4. 示例二:使用自定义校验器进行参数校验
以下是一个使用自定义校验器进行参数校验的示例:
- 创建一个名为User的类,并添加以下代码:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@NotNull(message = "密码不能为空")
@Size(min = 6, max = 20, message = "密码长度必须在6-20个字符之间")
private String password;
@Phone(message = "手机号码格式不正确")
private String phone;
// ...
}
在上面的代码中,我们创建了一个名为User的类,并在username、password和phone属性上添加了校验注解。在phone属性上,我们使用了自定义的@Phone注解。
- 创建一个名为PhoneValidator的自定义校验器,并添加以下代码:
public class PhoneValidator implements ConstraintValidator<Phone, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
return value.matches("^(13[0-9]|14[5-9]|15[0-3,5-9]|16[6]|17[0-8]|18[0-9]|19[1,8,9])\\d{8}$");
}
}
在上面的代码中,我们创建了一个名为PhoneValidator的自定义校验器,并实现了ConstraintValidator接口。在isValid()方法中,我们实现了手机号码的校验逻辑。
- 创建一个名为Phone的自定义注解,并添加以下代码:
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {PhoneValidator.class})
public @interface Phone {
String message() default "手机号码格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
在上面的代码中,我们创建了一个名为Phone的自定义注解,并在注解上添加了@Constraint注解,并指定了PhoneValidator.class作为校验器。
- 创建一个名为UserController的类,并添加以下代码:
@RestController
public class UserController {
@PostMapping("/user")
public User createUser(@Valid @RequestBody User user) {
// ...
}
}
在上面的代码中,我们创建了一个名为UserController的类,并在createUser()方法的参数上添加了@Valid注解,表示需要对该参数进行校验。
- 启动应用程序,并使用Postman等工具发送POST请求,请求体中包含username、password和phone参数。如果参数不符合校验规则,应该会返回相应的错误信息。
以上是Spring Boot中参数校验的完整攻略,包括使用注解方式和自定义校验器的实现方法,以及两个示例。使用Spring Boot的参数校验功能可以帮助我们在接口层面对请求参数进行校验,提高应用程序的健壮性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SpringBoot中的参数校验(项目实战) - Python技术站