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

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

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

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

1、依賴

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

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

非SpringBoot項(xiàng)目,需要自定引入依賴

<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、常用約束說(shuō)明

package com.smile.project.validator.utils;
?
public class 常用約束說(shuō)明 {
?
? ? /**
? ? ?* @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):元素是一個(gè)數(shù)字,其值必須在可接受的范圍內(nèi)
? ? ?* @Past:一個(gè)過(guò)去的日期
? ? ?* @Future:一個(gè)將來(lái)的日期
? ? ?* @Pattern(regex=,flag=):指定的正則表達(dá)式
? ? ?* @URL:必須是一個(gè)URL
? ? ?* @Email:必須是email格式
? ? ?* @NotBlank:字符串不能為空
? ? ?* @NotEmpty:集合不能為空
? ? ?* @Length:長(zhǎng)度必須在指定范圍內(nèi)
? ? ?* @Valid:對(duì)實(shí)體類(lèi)進(jìn)行校驗(yàn)
? ? ?*/
?
}

3、實(shí)體約束示例

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 = "用戶名長(zhǎng)度為{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ù)時(shí)實(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ù)為實(shí)體校驗(yàn)
? ? ?*/
? ? @PostMapping("/register")
? ? public ResponseEntity register(@Valid SysUser sysUser){
? ? ? ? return ResponseEntity.ok(sysUser);
? ? }
?
? ? /**
? ? ?* 方法參數(shù)校驗(yàn)
? ? ?*/
? ? @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ù)校驗(yà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ù)校驗(yàn)不合法時(shí)捕獲異常,并且返回給前端
?*/
@ControllerAdvice
public class GlobHandler {
?
? ? /**
? ? ?* 捕獲方法參數(shù)校驗(yàn)異常
? ? ?*/
? ? @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í)體參數(shù)校驗(yàn)異常
? ? ?*/
? ? @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、自定義校驗(yàn)規(guī)則

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

6.1、定義校驗(yàn)注解

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;
?
/**
?* 定義校驗(yàn)注解
?*/
@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實(shí)現(xiàn)ConstraintValidator接口并提供校驗(yàn)規(guī)則

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
?
/**
?* 實(shí)現(xiàn)ConstraintValidator接口并提供校驗(yàn)規(guī)則
?*/
public class GenderValidator implements ConstraintValidator<Gender,String> {
?
? ? //初始化校驗(yàn)值
? ? @Override
? ? public void initialize(Gender constraintAnnotation) {
?
? ? }
?
? ? //檢驗(yàn)規(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 = "用戶名長(zhǎng)度為{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、分組校驗(yàn)

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

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

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

7.2、修改尸體校驗(yàn)規(guī)則,如果不指定分組默認(rèn)時(shí)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 = "用戶名長(zhǎng)度為{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、控制層示例,此時(shí)只會(huì)校驗(yàn)ADD組和Default組

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

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

相關(guān)文章

  • Spring的refresh()方法相關(guān)異常解析

    Spring的refresh()方法相關(guān)異常解析

    這篇文章主要介紹了Spring的refresh()方法相關(guān)異常解析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java 反射機(jī)制

    Java 反射機(jī)制

    這篇文章簡(jiǎn)要的說(shuō)明了Java的反射機(jī)制,Java的反射是框架設(shè)計(jì)的靈魂,本文通過(guò)例子能看的更加清晰的理解
    2021-06-06
  • mybatis深入講解resultMap的定義及用法

    mybatis深入講解resultMap的定義及用法

    MyBatis的每一個(gè)查詢映射的返回類(lèi)型都是ResultMap,當(dāng)我們提供返回類(lèi)型屬性是resultType時(shí),MyBatis會(huì)自動(dòng)給我們把對(duì)應(yīng)值賦給resultType所指定對(duì)象的屬性,當(dāng)我們提供返回類(lèi)型是resultMap時(shí),將數(shù)據(jù)庫(kù)中列數(shù)據(jù)復(fù)制到對(duì)象的相應(yīng)屬性上,可以用于復(fù)制查詢,兩者不能同時(shí)用
    2022-04-04
  • 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之無(wú)權(quán)無(wú)向圖

    帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之無(wú)權(quán)無(wú)向圖

    這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之無(wú)權(quán)無(wú)向圖?,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • SpringBoot中的@CrossOrigin注解詳解

    SpringBoot中的@CrossOrigin注解詳解

    這篇文章主要介紹了SpringBoot中的@CrossOrigin注解詳解,跨源資源共享(CORS)是由大多數(shù)瀏覽器實(shí)現(xiàn)的W3C規(guī)范,允許您靈活地指定什么樣的跨域請(qǐng)求被授權(quán),而不是使用一些不太安全和不太強(qiáng)大的策略,需要的朋友可以參考下
    2023-11-11
  • Java Junit單元測(cè)試實(shí)例詳解

    Java Junit單元測(cè)試實(shí)例詳解

    在本篇文章里小編給大家分享的是關(guān)于Java Junit單元測(cè)試的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-11-11
  • java ThreadPoolExecutor線程池拒絕策略避坑

    java ThreadPoolExecutor線程池拒絕策略避坑

    這篇文章主要為大家介紹了java ThreadPoolExecutor拒絕策略避坑踩坑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • mybatisPlus打印sql配置的四種方法

    mybatisPlus打印sql配置的四種方法

    MyBatis-Plus提供了多種方式來(lái)配置SQL打印功能,以便進(jìn)行調(diào)試和性能分析,這篇文章主要介紹了mybatisPlus打印sql配置的四種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 詳解Java消息隊(duì)列-Spring整合ActiveMq

    詳解Java消息隊(duì)列-Spring整合ActiveMq

    本篇文章主要介紹了詳解Java消息隊(duì)列-Spring整合ActiveMq ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • java中的數(shù)學(xué)計(jì)算函數(shù)的總結(jié)

    java中的數(shù)學(xué)計(jì)算函數(shù)的總結(jié)

    這篇文章主要介紹了java中的數(shù)學(xué)計(jì)算函數(shù)的總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評(píng)論