1. 程式人生 > 其它 >Spring Boot使用Hibernate validator進行引數校驗

Spring Boot使用Hibernate validator進行引數校驗

轉載:https://blog.csdn.net/qq_34021712/article/details/87545287

一、概念

針對於引數校驗僅在客戶端進行校驗不是安全可靠的,可以進行抓包直接調取介面。引數校驗是基本上每個後端服務都需要進行的操作,但是在每個服務都加上if/else去判空,就顯得程式碼有些冗餘且不美觀、不便於維護,例如下圖所示:

於是就誕生了Hibernate validator,由於SpringBoot的Starters機制,只需要匯入對應的Starters依賴就可以使用相關的API。Hibernate Validator 是Hibernate專案中的一個數據校驗框架,是 JSR 380 參考實現。Hibernate Validator、Bean Validation API 和 TCK 都是使用了Apache Software License 2.0。

Hibernate Validator 6 和 Bean Validation 2.0 需要 Java8 或更新版本。

二、基本使用

  1. 匯入Pom依賴

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
  2. 引數校驗Demo

    package com.example.demo.model;
    
    import lombok.Data;
    
    
    import javax.validation.constraints.*; import java.io.Serializable; /** * @Author xiaoMu * @Date 2021/8/11 20:23 * @Description 使用者資訊 */ @Data public class UserModelRequest implements Serializable { /** 姓名 */ @NotBlank(message = "使用者姓名不能為空") private String name; /** 身份證號碼 */ @Pattern(regexp
    = "^(\\d{18}|\\d{17}(\\d{1}|[X|x]))$",message = "身份證格式不正確") private String idCardNum; /** 年齡 */ @NotNull(message="使用者年齡不能為空") @Size(max = 120,min = 1,message = "年齡不正確") private Integer age; /** 家庭住址 */ @NotBlank(message = "使用者地址不能為空") private String address; /** 是否已確認 */ @NotNull(message="使用者必須確認") @AssertTrue(message = "使用者必須確認") private Boolean confirmResult; }
  3. Controller方法配置

    package com.example.demo;
    
    import com.example.demo.model.UserModelRequest;
    import org.springframework.stereotype.Controller;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.validation.Valid;
    
    /**
     * @Author helin
     * @Date 2021/5/17 11:21
     * @Description NULL
     */
    @RestController
    @RequestMapping("/demo")
    public class controller {
    
        @PostMapping("/createUser")
        public String demo(@RequestBody @Valid UserModelRequest userModelRequest, BindingResult result) {
            if (result.hasErrors()) {
                for (ObjectError error : result.getAllErrors()) {
                    System.out.println(error.getDefaultMessage());
                }
            }
            return "Hello World";
        }
    }
    
    

三、其他使用方式