SpringBoot(五)数据校验

文章目录

    • 学习内容
    • Annotaion JSR-303 标准
    • 自定义校验

学习内容

模拟用户注册进行参数校验

Annotaion JSR-303 标准

开发者不需要编写验证逻辑,直接通过注解的形式就可以给每一条数据添加验证规则,具体操作是直接在实体类的属性上添加对于的校验规则即可,使用起来更加方便。
标准注解如下所示
SpringBoot(五)数据校验_第1张图片

接下来通过用户注册的场景来学习使用 JSR-303 标准进行数据校验

(1)创建 User 实体类,并通过注解给每个属性添加校验规则:

@Data
public class User {
    @NotEmpty(message = "用户名不能为空")
    private String username;
    @Size(min = 6,max = 20,message = "密码长度为6-12位")
    private String password;
    @Email(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$", message = "请输入正确的邮箱格式")
    private String email;
	@Pattern(regexp = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$",message="请输入正确的电话格式")
    private String phone;
}

(2)创建控制器 UserController,在业务方法 register 使用 @Valid 来绑定校验对象,@BindingResult 来保存错误信息。

@RestController
public class UserController {
    /**
     * 用户注册
     * @param user
     * @param bindingResult
     * @return
     */
    @PostMapping("/register")
    public Object register(@Valid User user, BindingResult bindingResult) {
        Map<String, Object> resultMap = new HashMap<>();

        if (bindingResult.hasFieldErrors()) {
            resultMap.put("code","001");
            bindingResult.getFieldError();
            resultMap.put("msg",bindingResult.getFieldError().getDefaultMessage());
            return resultMap;
        }

        resultMap.put("code","000");
        resultMap.put("msg","成功");
        return resultMap;
    }
}

(3)使用Postman工具进行测试

自定义校验

如果JSR-303提供的注解满足不了我们的需求,我们就需要自定义注解了。假设我们现在需要自定义一个校验手机号码的注解。
(1)新建IsMobile注解

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsMobileValidator.class })
public @interface  IsMobile {

    String message() default "手机号码格式错误";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}

(2)新建IsMobileValidator类

public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {

    private static final Pattern MOBILE_PATTERN = Pattern.compile("^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$");

    @Override
    public void initialize(IsMobile constraintAnnotation) {

    }
    
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if(StringUtils.isEmpty(value)) {
            return false;
        }
        Matcher m = MOBILE_PATTERN.matcher(value);
        return m.matches();
    }
}

通过以上两个步骤就实现了一个自定义的校验注解,用法如下:

@IsMobile(message = "无效的手机号")
private String phone;

代码地址:https://github.com/923226145/SpringBoot-learning/tree/master/springboot-chapter5

你可能感兴趣的:(SpringBoot)