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