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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM