java validate使用总结

在使用spring mvc时,经常会用的validate,这里是对validate做一个简单的总结。
对于validate的验证是基于spring-boot-2.6.2 或 spring-webmvc-5.3.14 版本

1.validate依赖添加

1 ). 对于spring boot项目需要在pom.xml中添加如下依赖。

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

2 ). 对于spring-mvc项目,需要在pom.xml中添加如下依赖

        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.2.0.Final</version>
            <scope>compile</scope>
        </dependency>

2.常用validate注解

注解 描述
@Valid 被注释的元素是一个对象,需要检查此对象的所有字段值
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
@Email 被注释的元素必须是电子邮箱地址
@Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=, max=) 被注释的元素必须在合适的范围内

3.如何使用validate注解

以注解@NotNull为例
controller代码如下:


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/api")
@Validated
@Slf4j
public class HelloController {

    @PostMapping("/hello" )
    @ResponseBody
    public String hello(@RequestBody @Validated RequestVo requestVo ) {
        log.info("接收参数={}",requestVo);
        // log.info(file.getOriginalFilename());
        return "success";
    }
}

RequestVo对象代码如下

import lombok.Data;
import lombok.ToString;

import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
@ToString
@Data
public class RequestVo {

    private Integer id;

   @NotNull(message ="name不能为空")
    private String name;

    private LocalDateTime dateTime;
}

4.请求参数仅有一个基本数据类型参数

例如:


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.hibernate.validator.constraints.Length;


@Controller
@RequestMapping("/api")
@Slf4j
@Validated
public class HelloController {

    @PostMapping("/testLength" )
    @ResponseBody
    public String testLength(@RequestBody @Length(min=10, max=20) String name ) {
        // log.info(file.getOriginalFilename());
        return "hello " + name;
    }
}

对于springboot项目一定要在controller项目上加入@Validated注解,否则@Length不会生效
对于springMvc项目除了要添加@Validated注解意外,还需要添加一个MethodValidationPostProcessor如下

package com.validation.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.env.Environment;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;

import javax.validation.Validator;

@Configuration
public class ValidationConfig {

    @Bean
    public static MethodValidationPostProcessor methodValidationPostProcessor(Environment environment,
                                                                              @Lazy Validator validator) {
        MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
        boolean proxyTargetClass = environment.getProperty("spring.aop.proxy-target-class", Boolean.class, true);
        processor.setProxyTargetClass(proxyTargetClass);
        processor.setValidator(validator);
        return processor;
    }
}

5.请求参数为List

上一篇:【Groovy】编译时元编程 ( ASTTransformation#visit 方法获取 Groovy 源文件 )


下一篇:Tomcat源码编译运行【笔记】