1、安装依赖
<!-- 校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
校验失败会抛出异常org.springframework.validation.BindException
2、常用注解
3、全局校验异常处理
@ExceptionHandler(BindException.class)
@ResponseBody
@ResponseStatus(code= HttpStatus.BAD_REQUEST)
public ErrorVo handleBindException(HttpServletRequest req, BindException e) {
e.printStackTrace();
String reqUrl = req.getRequestURI();
String method = req.getMethod();
String msg = StringUtils.collectionToDelimitedString(
e.getAllErrors()
.stream()
.map(err -> err.getDefaultMessage())
.collect(Collectors.toList()),",");
return Vos.error(ResultCode.ARGUMENTS_ERROR.getCode(),msg,method + " " + reqUrl);
}
4、使用方式
Controller中加@Valid
@ApiOperation("保存一条数据")
@PostMapping("/save")
public JsonVo save(@RequestBody
@Valid ReqVo vo) {
Po entity = reqVo2Po(vo);
if(getService().saveOrUpdate(entity)){
return Vos.ok();
} else{
throw new ArgumentsException(ResultCode.ARGUMENTS_ERROR);
}
}
在Vo中添加对应注解
package com.example.jiakao.pojo.vo.req.save;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
@ApiModel("保存考场信息的参数")
public class ExamPlaceReqVo {
@ApiModelProperty(value = "考场id")
private Long id;
@ApiModelProperty(value = "考场名称", required = true)
@NotBlank(message = "名称不能为空")
private String name;
@ApiModelProperty(value = "考场所属城市id", required = true)
@NotNull(message = "所属城市不能为空")
private Integer parentId;
}
结果如下
5、自定义校验注解
package com.example.jiakao.common.validator;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
//校验属性是不是0或1 => 布尔数值
@Documented
@Retention(RetentionPolicy.RUNTIME)
// FIELD用在属性上,TYPE用在类上,METHOD用在方法上
@Target(ElementType.FIELD)
@Constraint(validatedBy = BoolNumber.BoolNumberValidator.class)
public @interface BoolNumber {
String message() default "值应为0或1";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
class BoolNumberValidator implements ConstraintValidator<BoolNumber, Short> {
@Override
public boolean isValid(Short num, ConstraintValidatorContext constraintValidatorContext) {
return num == null || num == 0 || num == 1;
}
}
}