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;
}