在使用Spring Boot进行Web开发时,我们经常需要对用户输入的请求参数进行校验,以确保参数的合法性和有效性。本文将介绍Spring Boot中常用的参数校验方案,并提供一些示例代码来帮助你快速上手。
1. 使用@Valid注解和校验器
Spring Boot内置了对JSR-303校验规范的支持,通过在Controller方法的参数上添加@Valid注解,可以启用参数校验功能。同时,我们还需要定义一个校验器来实现具体的校验逻辑。
首先,在实体类中添加校验规则,例如:
public class User {
@NotBlank(message = "用户名不能为空")
private String username;
@Size(min = 6, max = 16, message = "密码长度必须在6-16个字符之间")
private String password;
// 省略getter和setter方法
}
然后,定义一个校验器来实现具体的校验逻辑:
@Component
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "username.empty", "用户名不能为空");
User user = (User) target;
if (user.getPassword() != null && user.getPassword().length() < 6) {
errors.rejectValue("password", "password.minlength", "密码长度不能小于6个字符");
}
}
}
最后,在Controller中使用@Valid注解并添加校验结果的BindingResult参数:
@RestController
public class UserController {
@Autowired
private UserValidator userValidator;
@PostMapping("/users")
public ResponseEntity<String> createUser(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
return ResponseEntity.badRequest().body(result.getFieldError().getDefaultMessage());
} else {
// 处理请求,创建用户
// ...
return ResponseEntity.ok("创建用户成功");
}
}
}
2. 使用自定义注解
除了使用Spring Boot内置的校验注解外,我们还可以自定义注解来完成更复杂的参数校验。例如,我们可以自定义一个用于校验手机号码格式的注解:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneNumberValidator.class)
public @interface PhoneNumber {
String message() default "手机号码格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
然后,实现一个校验器来实现具体的校验逻辑:
public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 校验手机号码格式
// ...
}
}
最后,在实体类中使用自定义注解进行参数校验:
public class User {
@NotBlank(message = "用户名不能为空")
private String username;
@Size(min = 6, max = 16, message = "密码长度必须在6-16个字符之间")
private String password;
@PhoneNumber
private String phoneNumber;
// 省略getter和setter方法
}
结语
通过使用@Valid注解和校验器,以及自定义注解,我们可以轻松地实现参数校验功能,提高代码的可靠性和健壮性。希望本文对你理解和应用Spring Boot参数校验方案有所帮助。
本文示例代码可在GitHub上找到。
本文来自极简博客,作者:奇迹创造者,转载请注明原文链接:Spring Boot参数校验方案
微信扫一扫,打赏作者吧~