springboot使用validation校验参数

 validation主要就是对数据的一些校验,比如id不能为空,最大/最小值的校验.先做一个简单的hello world 的demo

1.引包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

2. 在controller的接口参数列表中加上@Valid注解,然后再参数后面加上BinidiingResult,@Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱

  @RequestMapping("addEmp")
    @ResponseBody
    public String addEmp(@Valid Employee employee, BindingResult bindingResult) {
        if (bindingResult.hasErrors()){
            StringBuilder stringBuilder = new StringBuilder();
            bindingResult.getAllErrors().forEach(objectError -> stringBuilder.append(objectError.getDefaultMessage()).append(";"));
            return   WebUtil.getFailureJson(stringBuilder.toString());
        }

        return WebUtil.getSuccessJson(employeeService.addEmployee(employee));

    }

 这里的webUtil是我封装的返回jsonString的工具类,如果你们没有,就直接创建一个jsonObject.然后 jsonObject.put("message",stringBuilder.toString)这样返回也是json string.

3.在实体类上加上注解

package com.alimama.api.model;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;

public class Employee implements Serializable {
    /**
     * 主键
     */
    @NotNull(message = "用户主键不能为空!")
    private Long id;

    /**
     * 名字
     */
    @NotNull(message = "用户姓名不能为空!")
    private String lastName;

    /**
     * 性别 0:女 1:男
     */
    @NotNull(message = "用户性别不能为空!")
    private Byte gender;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 部门id
     */
    private Long departmentId;

    /**
     * 部门名称
     */
    private String departmentName;

    /**
     * 生日
     */
    private Date birth;

    /**
     * 密码
     */
    private String password;

    /**
     * 盐
     */
    private String salt;

 
}

4.测试

简单使用,下面有更多的注解,需要的自取.也是用的别的博客的注解图

å¨è¿éæå¥å¾çæè¿°

二:然后有时候我们需要自己定义需要校验的问题,那么我们需要自己写相关逻辑,自己定义注解

 1.定义注解,再写注解校验实现,最后在我们需要校验的字段加上注解,测试

package com.alimama.api.validations;

/**
 * Created by PengWX on 2020/4/23.
 */
//参照javax.validation.constraints包下的NotNull注解进行自定义自己的注解,添加以下四个注解

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsEmailValidator.class})// 通过Constraint注解器中的validatedBy参数,调用相应的类进行规则判定
public @interface EmailValidation {
    String message() default "email 格式错误"; //对email进行验证,验证不通过时返回的消息

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

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

    //参照javax.validation.constraints;包下的NotNull注解进行自定义自己的注解,以上三个函数是必须的

    // 自定义一个函数,设置是否允许参数为空
    boolean notNull() default true; //默认设置为不允许为空
}
package com.alimama.api.validations;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by PengWX on 2020/4/23.
 */
public class IsEmailValidator implements ConstraintValidator<EmailValidation, String> {
    private boolean notNull = false;

    @Override
    public void initialize(EmailValidation constraintAnnotation) {
        //初始化这个方法可以取到EmailValidation这个注解以及其中的内容
        notNull = constraintAnnotation.notNull();//将注解器中的内容取出
    }

    // value为用户输入的内容,实现ConstraintValidator的这个方法,通过这个方法进行对value校验是否合法
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        //不允许为空
        if (notNull) {
            return isEmail(value);
        } else {//允许为空
            if (value == null) {
                return true;
            } else {
                return isEmail(value);
            }
        }
    }

    // 进行email匹配,使用正则表达式匹配
    public static final Pattern email_pattern = Pattern.compile("^[A-Za-z\\d]+([-_.][A-Za-z\\d]+)*@([A-Za-z\\d]+[-.])+[A-Za-z\\d]{2,4}$");

    public static boolean isEmail(String email) {
        if (email == null) {
            return false;
        }
        Matcher matcher = email_pattern.matcher(email);
        return matcher.matches();
    }
}
    /**
     * 密码
     */
    @NotNull(message = "邮编不能为空!")
    @EmailValidation(message = "会不会填邮编啊")
    private String password;

 

测试

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值