Spring Boot参数校验方案

 
更多

在使用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上找到。

打赏

本文固定链接: https://www.cxy163.net/archives/7289 | 绝缘体

该日志由 绝缘体.. 于 2021年11月13日 发表在 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Spring Boot参数校验方案 | 绝缘体
关键字: , , , ,

Spring Boot参数校验方案:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter