1. 程式人生 > >Spring Boot專案使用引數校驗

Spring Boot專案使用引數校驗

開發web專案有時候我們需要對controller層傳過來的引數進行一些基本的校驗,比如非空,非null,整數值的範圍,字串的個數,日期,郵箱等等。最常見的就是我們直接寫程式碼校驗,這樣以後比較繁瑣,而且不夠靈活。

Bean Validation 1.0(JSR-303)是一個校驗規範,在spring Boot專案由於自帶了hibernate validator 5(http://hibernate.org/validator/)實現,所以我們可以非常方便的使用這個特性 。

核心的pom依賴:

<dependency>
    <groupId>org.hibernate</groupId
>
<artifactId>hibernate-validator</artifactId> <version>5.3.1.Final</version> </dependency>

首先,需要我們宣告一個Bean,注入校驗器到Spring Boot的執行環境

@Configuration
@EnableAutoConfiguration
public class FactoryConfig {
    
    final static Logger logger= LoggerFactory.getLogger(FactoryConfig.class
); @Bean public MethodValidationPostProcessor methodValidationPostProcessor(){ return new MethodValidationPostProcessor(); } }

校驗常用的註解如下:

@AssertFalse 校驗false
@AssertTrue 校驗true
@DecimalMax(value=,inclusive=) 小於等於value,
inclusive=true,是小於等於
@DecimalMin(value=,inclusive=) 與上類似
@Max
(value=) 小於等於value @Min(value=) 大於等於value @NotNull 檢查Null @Past 檢查日期 @Pattern(regex=,flag=) 正則 @Size(min=, max=) 字串,集合,map限制大小 @Valid 對po實體類進行校驗

下面看一個使用例子:

package hello;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class PersonForm {

    //名字不能為空,而且長度必須在2和30之間
    @NotNull(message = "名稱不能為空")
    @Size(min=2, max=30, message = "名字長度必須在2和30之間")
    private String name;
    
    //年齡不能為空,而且必須大於等於18歲
    @NotNull
    @Min(18)
    private Integer age;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String toString() {
        return "Person(Name: " + this.name + ", Age: " + this.age + ")";
    }
}

接著看下如何在Controller層使用

//非實體類引數可以直接使用註解
 @GetMapping("/check")
@ResponseBody
public String check(@Min(0,message = "kpId必須大於等於0") @RequestParam int kpId,@RequestParam int level) {
        return "ok";
}
    //實體類註解校驗使用@Valid
    @PostMapping("/")
    public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "form";
        }
        return "redirect:/results";
    }

注意上面的Spring提供的BindingResult是錯誤結果的一個封裝,我們可以在web頁面中通過這個物件拿到詳細的錯誤資訊,

<td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Age Error</td>

相關推薦

Spring Boot MVC 引數

文章目錄 Spring Boot Validate 常用註解 使用說明 基本使用 實現分組校驗 處理校驗結果 自定義校驗註解 配置校驗提示資訊 手動進行校驗

Spring Boot引數

閱讀本文需要Spring Boot、Java註解等背景知識 背景 我們通常需要驗證引數是否非法, 比如長度、非空、列舉範圍等. 二逼青年的做法是寫一堆if進行校驗 if (id == null || id <= 0) {

Spring基礎系列-引數

原創作品,可以轉載,但是請標註出處地址:https://www.cnblogs.com/V1haoge/p/9953744.html Spring中使用引數校驗 概述 ​ JSR 303中提出了Bean Validation,表示JavaBean的校驗,Hibernate Validation是其具體實

spring註解式引數

一般入參我們都會轉為vo物件。那麼直接在物件的屬性上註解即可。 其實spring用的是hibernate的validator. 步驟 1.配置spring.xml <mvc:annotation-driven /> 2.配置

spring 自定義引數

Spring bean校驗 public abstract class GenericValidator { public abstract void validate(ProceedingJoinPoint pjp); protected

spring boot 自定義註解

建立註解 import cn.wyj.validation.SpecificIntegerConstraintValidator; import javax.validation.Constrai

關於怎麼解決從ajax傳入的json引數注入到Controller的接收物件 以及如何在Spring Boot專案使用引數

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <tit

Spring Boot專案使用引數

開發web專案有時候我們需要對controller層傳過來的引數進行一些基本的校驗,比如非空,非null,整數值的範圍,字串的個數,日期,郵箱等等。最常見的就是我們直接寫程式碼校驗,這樣以後比較繁瑣,而且不夠靈活。 Bean Validation 1.0(JSR-303

Spring Boot 使用hibernate validator進行引數

demo 實體類 public class UserBean { @NotBlank(message="使用者名稱不能為空") private String userName; @NotBlank(message="年齡不能為空") @P

Spring Boot 2.x基礎教程:JSR-303實現請求引數

請求引數的校驗是很多新手開發非常容易犯錯,或存在較多改進點的常見場景。比較常見的問題主要表現在以下幾個方面: 僅依靠前端框架解決引數校驗,缺失服務端的校驗。這種情況常見於需要同時開發前後端的時候,雖然程式的正常使用不會有問題,但是開發者忽略了非正常操作。比如繞過前端程式,直接模擬客戶端請求,這時候就會突然在

如何在 Spring/Spring Boot 中做引數?你需要了解的都在這裡!

本文為作者原創,如需轉載請在文首著名地址,公眾號轉載請申請開白。 springboot-guide : 適合新手入門以及有經驗的開發人員查閱的 Spring Boot 教程(業餘時間維護中,歡迎一起維護)。 資料的校驗的重要性就不用說了,即使在前端對資料進行校驗的情況下,我們還是要對傳入後端的資料再進行一

手把手寫一個基於Spring Boot框架下的引數元件(JSR-303)

前言           之前參與的新開放平臺研發的過程中,由於不同的介面需要對不同的入參進行校驗,這就涉及到通用引數的校驗封裝,如果不進行封裝,那麼寫出來的校驗程式碼將會風格不統一、校驗工具類不一致、維護風險高等其它因素,於是我對其公共的校驗做了一個封裝,達到了通過註解的方式即可實現引數統一校驗。 遇到的問

測試開發專題:如何在spring-boot中進行引數

上文我們討論了spring-boot如何去獲取前端傳遞過來的引數,那傳遞過來總不能直接使用,需要對這些引數進行校驗,符合程式的要求才會進行下一步的處理,所以本篇文章我們主要討論spring-boot中如何進行引數校驗。 ### lombok使用介紹 在介紹引數校驗之前,先來了解一下lombok的使用,因為

更加靈活的引數Spring-boot自定義引數註解

上文[測試開發專題:如何在spring-boot中進行引數校驗](https://www.immortalp.com/articles/2020/05/15/1589509696197.html),我們討論瞭如何使用@Min、@Max等註解進行引數校驗,主要是針對基本資料型別和級聯物件進行引數校驗的演示,但是

測試開發專題:spring-boot自定義返回引數錯誤資訊

之前兩篇文章 [Spring-boot自定義引數校驗註解](https://www.immortalp.com/articles/2020/05/15/1589509382896.html)和[如何在spring-boot中進行引數校驗](https://www.immortalp.com/articles/

spring boot 專案重新搭建----------mvc配置:引數解析

7.addResourceHandlers靜態資源解析 如: registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); 8.addC

Spring請求引數

SpringMVC支援的資料校驗是JSR303的標準,通過在bean的屬性上打上@NotNull、@Max等進行驗證。JSR303提供有很多annotation介面,而SpringMVC對於這些驗證是使用hibernate的實現,所以我們需要新增hibernate的一個validator包: 依賴引用 com

Spring boot 專案HttpSessionListener用於監聽session失效時移除線上使用者的全域性引數

在專案中會出現使用者不點選登出時間觸發session.invalidate()方法,此時我們就無法確定使用者的實際登入狀態,再次我們使用HttpSessionListener監聽器來管理使用者session失效,進而解決了線上使用者的統計或者全域性引數的控制 值得注意的是: @Se

Spring Validation引數

簡介 Spring Validation是在Spring Context下的,在Spring Boot專案中,我們引入spring-boot-starter-web便會引入進來,Spring Validation是對Hibernate Validator的二次封裝,使我們可以更方便的

Spring下基於註解的引數

        前段時間,為了校驗介面資料方便,實現了一個簡易的引數校驗功能。通過引數上加註解並且配置spring aop實現的。大概配置如下:public Object ArroundParamCheck(ProceedingJoinPoint pj) throws Thr