欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成Validation參數(shù)校驗

 更新時間:2022年01月16日 08:20:55   作者:one_smail  
這篇文章主要為大家詳細(xì)介紹了SpringBoot集成Validation參數(shù)校驗,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了SpringBoot集成Validation參數(shù)校驗的具體代碼,供大家參考,具體內(nèi)容如下

1、依賴

SpringBoot在web啟動器中已經(jīng)包含validator包

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

非SpringBoot項目,需要自定引入依賴

<dependency>
? ? <groupId>org.hibernate.validator</groupId>
? ? <artifactId>hibernate-validator</artifactId>
? ? <version>6.1.5.Final</version>
</dependency>
<dependency>
? ? <groupOd>org.glassfish</groupId>
? ? <artifactId>jakarta.el</artifactId>
? ? <version>3.0.3</version>
</dependency>

2、常用約束說明

package com.smile.project.validator.utils;
?
public class 常用約束說明 {
?
? ? /**
? ? ?* @Null:元素為null
? ? ?* @NotNull:元素不為null
? ? ?* @AssertTrue:元素為true
? ? ?* @AssertFalse:元素為false
? ? ?* @Min(value):數(shù)字的值大于等于指定的最小值
? ? ?* @Max(value):數(shù)字的值小于等于指定的最大值
? ? ?* @DecimalMin(value):大數(shù)值大于等于指定的最小值
? ? ?* @DecimalMax(value):大數(shù)值小于等于指定的最大值
? ? ?* @Size(max=,min=):元素的大小在指定的范圍內(nèi)
? ? ?* @Digits(integer,fraction):元素是一個數(shù)字,其值必須在可接受的范圍內(nèi)
? ? ?* @Past:一個過去的日期
? ? ?* @Future:一個將來的日期
? ? ?* @Pattern(regex=,flag=):指定的正則表達(dá)式
? ? ?* @URL:必須是一個URL
? ? ?* @Email:必須是email格式
? ? ?* @NotBlank:字符串不能為空
? ? ?* @NotEmpty:集合不能為空
? ? ?* @Length:長度必須在指定范圍內(nèi)
? ? ?* @Valid:對實體類進(jìn)行校驗
? ? ?*/
?
}

3、實體約束示例

import com.smile.project.validator.utils.Gender;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
?
@Data
public class SysUser {
?
? ? private Long id;
?
? ? @NotNull(message = "用戶名不能為空")
? ? @Size(min = 3,max = 5,message = "用戶名長度為{min}-{max}之間")
? ? private String username;
?
? ? @NotNull(message = "昵稱不能為空")
? ? private String name;
?
? ? @NotNull(message = "密碼不能為空")
? ? private String password;
?
? ? @Email(message = "郵箱格式不合法")
? ? private String email;
?
? ? private String gender;
?
}

4、控制層示例

需要在class加上@Validated注解

如果參數(shù)時實體,需要加上@Valid注解

import com.smile.project.validator.entity.SysUser;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
?
@RestController
@Validated
public class SysUserController {
?
? ? /**
? ? ?* 方法參數(shù)為實體校驗
? ? ?*/
? ? @PostMapping("/register")
? ? public ResponseEntity register(@Valid SysUser sysUser){
? ? ? ? return ResponseEntity.ok(sysUser);
? ? }
?
? ? /**
? ? ?* 方法參數(shù)校驗
? ? ?*/
? ? @GetMapping("user")
? ? public ResponseEntity getUser(@NotNull(message = "用戶名不能為空") String username){
? ? ? ? SysUser sysUser = new SysUser();
? ? ? ? sysUser.setName("smile");
? ? ? ? return ResponseEntity.ok(sysUser);
? ? }
?
}

5、異常捕獲

全局異常捕獲,當(dāng)出現(xiàn)參數(shù)校驗不合法時捕獲異常,并且返回給前端

import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
?
/**
?* 全局異常捕獲
?* 當(dāng)出翔參數(shù)校驗不合法時捕獲異常,并且返回給前端
?*/
@ControllerAdvice
public class GlobHandler {
?
? ? /**
? ? ?* 捕獲方法參數(shù)校驗異常
? ? ?*/
? ? @ExceptionHandler(ConstraintViolationException.class)
? ? @ResponseBody
? ? public ResponseEntity constraintViolationExceptionHandler(ConstraintViolationException e){
? ? ? ? Set<ConstraintViolation<?>> message = e.getConstraintViolations();
? ? ? ? HashMap<String,Object> map = new HashMap<>();
? ? ? ? message.stream().forEach(msg ->{
? ? ? ? ? ? String path = msg.getPropertyPath().toString();
? ? ? ? ? ? String field = path.substring(path.indexOf(".")+1);
? ? ? ? ? ? map.put(field,msg.getMessageTemplate());
? ? ? ? });
? ? ? ? return ResponseEntity.ok(map);
? ? }
?
? ? /**
? ? ?* 捕獲實體參數(shù)校驗異常
? ? ?*/
? ? @ExceptionHandler(MethodArgumentNotValidException.class)
? ? @ResponseBody
? ? public ResponseEntity resolveMethodArgumentNotValidException(MethodArgumentNotValidException e){
? ? ? ? List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
? ? ? ? HashMap<String,Object> map = new HashMap<>();
? ? ? ? allErrors.stream().forEach(error -> {
? ? ? ? ? ? FieldError fieldError = (FieldError) error;
? ? ? ? ? ? map.put(fieldError.getField(),fieldError.getDefaultMessage());
? ? ? ? });
? ? ? ? return ResponseEntity.ok(map);
? ? }
?
}

6、自定義校驗規(guī)則

特殊的字段需要自定義規(guī)則,比如身份證號碼,郵箱,電話等

6.1、定義校驗注解

import com.smile.project.validator.utils.GenderValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
?
/**
?* 定義校驗注解
?*/
@Target({METHOD,FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = GenderValidator.class)
@Documented
public @interface Gender {
?
? ? String message() default "性別為男或者女";
?
? ? Class<?>[] groups() default {};
?
? ? Class<? extends Payload[]>[] payload() default {};
?
}

6.2、GenderValidator實現(xiàn)ConstraintValidator接口并提供校驗規(guī)則

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
?
/**
?* 實現(xiàn)ConstraintValidator接口并提供校驗規(guī)則
?*/
public class GenderValidator implements ConstraintValidator<Gender,String> {
?
? ? //初始化校驗值
? ? @Override
? ? public void initialize(Gender constraintAnnotation) {
?
? ? }
?
? ? //檢驗規(guī)則
? ? @Override
? ? public boolean isValid(String value, ConstraintValidatorContext content) {
? ? ? ? return "男".equals(value) || "女".equals(value);
? ? }
}

6.3、在成員變量中使用注解

import com.smile.project.validator.utils.Gender;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
?
@Data
public class SysUser {
?
? ? private Long id;
?
? ? @NotNull(message = "用戶名不能為空")
? ? @Size(min = 3,max = 5,message = "用戶名長度為{min}-{max}之間")
? ? private String username;
?
? ? @NotNull(message = "昵稱不能為空")
? ? private String name;
?
? ? @NotNull(message = "密碼不能為空")
? ? private String password;
?
? ? @Email(message = "郵箱格式不合法")
? ? private String email;
?
? ? @Gender()
? ? private String gender;
?
}

7、分組校驗

默認(rèn)情況下,不指定分組都屬于默認(rèn)組;使用分組校驗有利于分層校驗開發(fā)

7.1、新建兩個接口,一個用于查詢,一個用于添加

public interface ADD extends Default {
?
}
?
public interface Select extends Default {
?
}

7.2、修改尸體校驗規(guī)則,如果不指定分組默認(rèn)時Default組;

import com.smile.project.validator.utils.Gender;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
?
@Data
public class SysUser {
?
? ? private Long id;
?
? ? @NotNull(message = "用戶名不能為空",groups = ADD.class)
? ? @Size(min = 3,max = 5,message = "用戶名長度為{min}-{max}之間")
? ? private String username;
?
? ? @NotNull(message = "昵稱不能為空",groups = Select.class)
? ? private String name;
?
? ? @NotNull(message = "密碼不能為空",groups = ADD.class)
? ? private String password;
?
? ? @Email(message = "郵箱格式不合法",groups = Select.class)
? ? private String email;
?
? ? @Gender()
? ? private String gender;
?
}

7.3、控制層示例,此時只會校驗ADD組和Default組

//分組校驗
@PostMapping("/user")
public ResponseEntity addUser(@Validated(value = ADD.class) @RequestBody SysUser sysUser){
? ? return ResponseEntity.ok(sysUser);
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis遞歸 一對多的實現(xiàn)方法示例

    mybatis遞歸 一對多的實現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于mybatis遞歸 一對多實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Flutter瀑布流仿寫原生的復(fù)用機(jī)制詳解

    Flutter瀑布流仿寫原生的復(fù)用機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于Flutter瀑布流仿寫原生的復(fù)用機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用flutter具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-07-07
  • Yml轉(zhuǎn)properties文件工具類YmlUtils的詳細(xì)過程(不用引任何插件和依賴)

    Yml轉(zhuǎn)properties文件工具類YmlUtils的詳細(xì)過程(不用引任何插件和依賴)

    這篇文章主要介紹了Yml轉(zhuǎn)properties文件工具類YmlUtils(不用引任何插件和依賴),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題

    IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題

    這篇文章主要介紹了IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題,本文通過場景描述及問題解析,給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java中Scanner用法實例解析

    Java中Scanner用法實例解析

    Scanner?指的是java.util包下的Scanner類,可以接收控制臺輸入的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java中Scanner用法實例的相關(guān)資料,文中通過實例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • java swing GUI窗口美化方式

    java swing GUI窗口美化方式

    這篇文章主要介紹了java swing GUI窗口美化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 基于SpringBoot項目實現(xiàn)Docker容器化部署的主要步驟

    基于SpringBoot項目實現(xiàn)Docker容器化部署的主要步驟

    部署SpringBoot項目到Docker容器涉及選擇Java運行時環(huán)境的基礎(chǔ)鏡像、構(gòu)建包含應(yīng)用程序的Docker鏡像、編寫Dockerfile、使用docker build命令構(gòu)建鏡像和使用docker run命令運行Docker容器等步驟
    2024-10-10
  • 如何運行SpringBoot項目的方法

    如何運行SpringBoot項目的方法

    這篇文章主要介紹了如何運行SpringBoot項目的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Spring boot項目集成Camel FTP的方法示例

    Spring boot項目集成Camel FTP的方法示例

    這篇文章主要介紹了Spring boot項目集成Camel FTP的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • java數(shù)據(jù)結(jié)構(gòu)與算法之簡單選擇排序詳解

    java數(shù)據(jù)結(jié)構(gòu)與算法之簡單選擇排序詳解

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之簡單選擇排序,結(jié)合實例形式分析了選擇排序的原理、實現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05

最新評論