SpringBoot使用Hibernate-validate
本篇文章SpringBoot使用Hibernate-validate以及一些常用的校验
Maven依赖
SpringBoot2.3.x 以前 如果按照 SpringBoot 的方式引入了 spring-boot-starter-web,则不需要特意引入 spring-boot-starter-validation
SpringBoot2.3.x 以后需要显引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
将参数接受实体DTO进行改造
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ApiModel(description = "api模型")
@Data
public class TAccessApiListDTO implements Serializable {
@ApiModelProperty(name = "id",value = "主键id")
@NotNull(message="id不能为空")
private Integer id;
@ApiModelProperty(name = "apiname",value = "api名称")
@Length(max = 50)
@NotBlank(message = "接口名称不能为空")
private String apiname ;
@ApiModelProperty(name = "request_method",value = "请求方式:GET,POST")
@NotBlank(message = "请求方式不能为空")
private String request_method ;
@ApiModelProperty(name = "version",value = "api版本号")
@NotBlank(message = "版本号不能为空")
private String version ;
@ApiModelProperty(name = "apiparameter",value = "api参数")
private String apiparameter ;
@ApiModelProperty(name = "url",value = "url地址")
@NotBlank(message = "接口地址不能为空")
//@Pattern(regexp = "^((https|http)?:\\/\\/)[^\\s]+$",message = "请填写合法的URL")
private String url ;
}
接口改造
在接口原有基础上添加注解 @Valid 或者 @Validated(spring 自带的,多了分组功能,其他请自行查资料)
@Api(description = "api管理模块")
@RestController
@RequestMapping("/apimanage")
public class ApimanageController {
@Autowired
private ApimanageService apimanageService;
@ApiOperation(value = "api修改")
@PostMapping("/update")
public JsonResult update(@RequestBody @Valid TAccessApiListDTO accessApiListDto){
apimanageService.updateTAccessApiList(accessApiListDto);
return JsonResult.successModelResult(null);
}
}
全局异常拦截处理
请在自己原有的全局异常拦截器中新增 MethodArgumentNotValidException 异常的处理
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public JsonResult validationError(MethodArgumentNotValidException ex) {
FieldError fieldError = ex.getBindingResult().getFieldError();
log.error(fieldError.getField()+fieldError.getDefaultMessage());
return JsonResult.BuildModelResult("9999",false, fieldError.getField()+fieldError.getDefaultMessage(),null);
}
}
到此 SpringBoot 使用 Hibernate-validate 校验,讲完了
常用的校验
1. @NotBlank
适合字符串的非空校验
@NotBlank(message = "url不能为空")
2. @Pattern
使用正则表达式进行校验
例如URL的校验
@Pattern(regexp = "^((https|http)?:\\/\\/)[^\\s]+$",message = "请填写合法的URL")
4. @NotNull
对象不能为 null
@NotNull(message="id不能为空")
5. @Length
字符串长度判断
@Length(min = 1,max = 500,message = "字符串长度必须在1-500之间")
6. @Size
判断集合的大小
@Size(min = 1,max = 100,message = "集合大小必须在1-100之间")
7. @Email
邮箱格式判断
@Email(message = "邮箱格式不正确")