新增知识:spring集成Hibernate-Validator

43 阅读2分钟

spring集成Hibernate-Validator第一次使用

第一步:创建模块

image-20231228192134642.png 导入Hibernate-Validator 依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

再导入spring的依赖和lombok的依赖

		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

先进行简单测试

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Student {


    private Long id;
    /**
     * @NotEmpty注解(适合校验字符串),如果传入的姓名是空的就会返回错误信息: "姓名不能为空"
     */
    @NotEmpty(message = "姓名不能为空")
    private String name;

    /**
     * @NotNull注解,如果传入的姓名是空的就会返回错误信息: "年龄不能为空"
     * @Range如果年龄大于等于100或小于等于0 就会报错
     */
    @NotNull(message = "年龄不能为空")
    @Range(min = 0, max = 100, message = "年龄不合法")
    private Integer age;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String brith;


}

//创建控制器测试
@GetMapping("/test")
public Student test3(@Validated @RequestBody Student student) {
    System.out.println(student);
    return student;
}
    //创建全局异常处理器
    ```
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> handle(MethodArgumentNotValidException e) {
        List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
        ObjectError objectError = allErrors.stream().findFirst().get();
        // 获取message的值
        return new ResponseEntity<>(objectError.getDefaultMessage(), HttpStatus.BAD_REQUEST);
    }
   
}

检验姓名不能为空:

image-20231229105159265.png 校验年龄

image-20231229105617791.png

image-20231229105643246.png 所以有了这个框架以后就不用再到业务层写那些和实体类相关的参数校验了。

常用注解

注解作用
@NotNull不能为null,支持所有类型
@NotBlank不能为空,检查时会将空格忽略,一般用于String
@NotEmpty不能为空,这里的空是指空字符串,支持的类型包括String, Collection, Map 和数组.
@Length(min=,max=)检查所属的字段的长度是否在min和max之间,只能用于字符串
@Max该字段的值只能小于或等于该值,持类型包括BigDecimal,BigInteger, String,byte, short, int, long和其各自对应的包装器类型.
@Min该字段的值只能大于或等于该值,持类型包括BigDecimal,BigInteger, String,byte, short, int, long和其各自对应的包装器类型.
@Range(min=,max=,message=)被注释的元素必须在合适的范围内
@Size(min=, max=)检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
@Future检查该字段的日期是否是属于将来的日期,支持类型是java.util.Date 和java.util.Calendar
@AssertTrue用于boolean字段,该字段只能为true
@AssertFalse该字段的值只能为false
@Digits(integer=,fraction=)检查是否是一种数字的整数、分数,小数位数的数字,支持类型包括BigDecimal,BigInteger, String,byte, short, int, long和其各自对应的包装器类型.
@Email检查是否是一个有效的email地址,需要是String类型的.
@DecimalMax只能小于或等于该值,字段或属性. 支持类型包括BigDecimal,BigInteger, String,byte, short, int, long和其各自对应的包装器类型.
@DecimalMin只能大于或等于该值,字段或属性. 支持类型包括BigDecimal,BigInteger, String,byte, short, int, long和其各自对应的包装器类型.
@URL(protocol=,host,port)检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件