springboot 2.3 + mybatis 如何整合hibernate数据校验

1.添加依赖包

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>6.0.1.Final</version>
		</dependency>

2.控制类

package com.iflytek.edu.hnezzhxy.controller;

import com.iflytek.edu.hnezzhxy.dto.MyEntrollDto;
import com.iflytek.edu.hnezzhxy.model.ZsbmLog;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.ConstraintViolationException;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;
import java.util.List;

/**
 * @version 1.0
 * @description 测试类
 * @create 2020/07/02 13:11
 */
@RestController
@Validated
public class TestController {

	/** 单个参数验证控制类上要加@Validated **/
    @RequestMapping("/testStr")
    public void testStr(@NotBlank(message ="name不能为空!") @RequestParam(value="name") String name){
        System.out.println("name = " + name);
    }

     /** 对myEntrollDto对象中的属性验证@RequestBody前面要加@Valid **/
    @RequestMapping("/testObj")
    public void testObj(@Valid @RequestBody MyEntrollDto myEntrollDto){
    }
}

3.定义全局验证异常类

package com.iflytek.edu.hnezzhxy.common.base;

import com.iflytek.edu.hnezzhxy.common.enums.ResponseCodeEnum;
import com.iflytek.edu.hnezzhxy.util.ResponseResultUtil;
import com.iflytek.edu.hnezzhxy.vo.ResultVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.List;
import java.util.Set;

/**
 * @description 全局异常处理类
 * @create 2020/06/18 15:44
 * @version 1.0
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    protected Logger logger = LoggerFactory.getLogger(getClass());
    
    /**
     * 对控制层的单个定义的一些属性进行验证异常处理
     * @author yeqing
     * @date 2020-06-16
     * @param e
     * @return
     */
    @ExceptionHandler({ConstraintViolationException.class})    //申明捕获那个异常类
    public ResultVO constraintViolationExceptionHandler(ConstraintViolationException  e) {
        ResultVO result=new ResultVO(null,null,null,false);
        Set<ConstraintViolation<?>> set = e.getConstraintViolations();
        if(set!=null&&set.size()>0){
            result.setCode(400);
            result.setMessage(set.iterator().next().getMessage());
        }
        return result;
    }

}

4.单个参数验证例子

在这里插入图片描述
5.对象参数验证

在这里插入图片描述
6.要验证的外层对象类

package com.iflytek.edu.hnezzhxy.dto;

import com.iflytek.edu.hnezzhxy.model.ZsbmAttach;
import com.iflytek.edu.hnezzhxy.model.ZsbmStudent;
import com.iflytek.edu.hnezzhxy.model.ZsbmStudentParent;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
 * @create 2020/06/18 14:44
 * @version 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyEntrollDto {

    /** 学生model **/
    @NotNull(message = "zsbmStudent对象不能为空!")
    private @Valid ZsbmStudent zsbmStudent;

    /** 学生最好的成绩model **/
    @NotNull(message = "bestScores集合不能为空!")
    private @Valid List<ZsbmAttach> bestScores;

    /** 学生的相关亲人信息model **/
    @NotNull(message = "zsbmStudentParent对象不能为空!")
    private @Valid  List<ZsbmStudentParent> zsbmStudentParent;

    /** 附件相关实体类信息 **/
    @NotNull(message = "zsbmAttach对象不能为空!")
    private @Valid ZsbmAttach zsbmAttach;

}

7.要验证的子对象类

package com.iflytek.edu.hnezzhxy.model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;

/**
 * @version 1.0
 * @description
 * @create 2020/06/22 10:46
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ZsbmAttach {
    /** 主键 **/
    private Integer id;
    /** 文件主键 **/
    private String sid;
    /** 文件名称 **/
    @NotBlank(message = "文件名称不能为空!")
    private String fileName;
    /** 文件的后缀名 **/
    @NotBlank(message = "文件后缀名不能为空!")
    private String suffix;
    /** 文件大小 **/
    @NotBlank(message = "文件大小不能为空!")
    private String fileSize;
    /** 文件服务存储id **/
    @NotBlank(message = "文件服务存储id不能为空!")
    private String contextId;
    /** 文件上传路径 **/
    @NotBlank(message = "文件上传路径不能为空!")
    private String fileUrl;
    /** 删除标识 **/
    private byte delFlag;
    /** 0 头像 1 成绩证明 **/
    private byte type;
}

猜你喜欢

转载自blog.csdn.net/qq_40974235/article/details/107086425
今日推荐