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

詳解Springboot如何優(yōu)雅的進行數(shù)據(jù)校驗

 更新時間:2023年06月06日 10:00:30   作者:Hypnosis  
基于?Spring?Boot?,如何“優(yōu)雅”的進行數(shù)據(jù)校驗?zāi)?,本文將待大家詳細介紹Springboot如何優(yōu)雅的進行數(shù)據(jù)校驗,文中有詳細的代碼示例和流程步驟,需要的朋友可以參考下

引入依賴

首先只需要給項目添加上 spring-boot-starter-web 依賴就夠了,它的子依賴包含了我們所需要的東西。

注意: Spring Boot 2.3 1 之后,spring-boot-starter-validation 已經(jīng)不包括在了 spring-boot-starter-web 中,需要我們手動加上!

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

驗證 Controller 的輸入

一定一定不要忘記在類上加上 @ Validated 注解了,這個參數(shù)可以告訴 Spring 去校驗方法參數(shù)。

驗證請求體

驗證請求體即使驗證被 @RequestBody 注解標記的方法參數(shù)。

PersonController

我們在需要驗證的參數(shù)上加上了@Valid注解,如果驗證失敗,它將拋出MethodArgumentNotValidException。默認情況下,Spring 會將此異常轉(zhuǎn)換為 HTTP Status 400(錯誤請求)。

@RestController
@RequestMapping("/api/person")
@Validated
public class PersonController {
    @PostMapping
    public ResponseEntity<PersonRequest> save(@RequestBody @Valid PersonRequest personRequest) {
        return ResponseEntity.ok().body(personRequest);
    }
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PersonRequest {
    @NotNull(message = "classId 不能為空")
    private String classId;
    @Size(max = 33)
    @NotNull(message = "name 不能為空")
    private String name;
    @Pattern(regexp = "(^Man$|^Woman$|^UGM$)", message = "sex 值不在可選范圍")
    @NotNull(message = "sex 不能為空")
    private String sex;
}

使用 Postman 驗證

驗證請求參數(shù)

驗證請求參數(shù)(Path Variables 和 Request Parameters)即是驗證被 @PathVariable 以及 @RequestParam 標記的方法參數(shù)。

PersonController

@RestController
@RequestMapping("/api/persons")
@Validated
public class PersonController {
    @GetMapping("/{id}")
    public ResponseEntity<Integer> getPersonByID(@Valid @PathVariable("id") @Max(value = 5, message = "超過 id 的范圍了") Integer id) {
        return ResponseEntity.ok().body(id);
    }
    @PutMapping
    public ResponseEntity<String> getPersonByName(@Valid @RequestParam("name") @Size(max = 6, message = "超過 name 的范圍了") String name) {
        return ResponseEntity.ok().body(name);
    }
}

使用 Postman 驗證

嵌套校驗

在一個校驗A對象里另一個B對象里的參數(shù)

需要在B對象上加上@Valid注解

常用校驗注解總結(jié)

JSR303 定義了 Bean Validation(校驗)的標準 validation-api,并沒有提供實現(xiàn)。Hibernate Validation是對這個規(guī)范/規(guī)范的實現(xiàn) hibernate-validator,并且增加了 @Email、@Length、@Range 等注解。Spring Validation 底層依賴的就是Hibernate Validation。

JSR 提供的校驗注解:

  • @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=) 被注釋的元素必須符合指定的正則表達式

Hibernate Validator 提供的校驗注解

  • @NotBlank(message =) 驗證字符串非 null,且長度必須大于 0
  • @Email 被注釋的元素必須是電子郵箱地址
  • @Length(min=,max=) 被注釋的字符串的大小必須在指定的范圍內(nèi)
  • @NotEmpty 被注釋的字符串的必須非空
  • @Range(min=,max=,message=) 被注釋的元素必須在合適的范圍內(nèi)

@JsonFormat與@DateTimeFormat注解的使用

@JsonFormat用于后端傳給前端的時間格式轉(zhuǎn)換,@DateTimeFormat用于前端傳給后端的時間格式轉(zhuǎn)換

JsonFormat

1、使用maven引入@JsonFormat所需要的jar包

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.8.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.8</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
         </dependency>

2、在需要查詢時間的數(shù)據(jù)庫字段對應(yīng)的實體類的屬性上添加@JsonFormat

   @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
   private LocalDateTime updateDate;

注: timezone:是時間設(shè)置為東八區(qū),避免時間在轉(zhuǎn)換中有誤差,pattern:是時間轉(zhuǎn)換格式

DataTimeFormat

1、添加依賴

       <dependency>
           <groupId>joda-time</groupId>
           <artifactId>joda-time</artifactId>
           <version>2.3</version>
      </dependency>

2、我們在對應(yīng)的接收前臺數(shù)據(jù)的對象的屬性上加@DateTimeFormat

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime acquireDate;

3.這樣我們就可以將前端獲取的時間轉(zhuǎn)換為一個符合自定義格式的時間格式存儲到數(shù)據(jù)庫了 全局異常統(tǒng)一處理:攔截并處理校驗出錯的返回數(shù)據(jù) 寫一個全局異常處理類

@ControllerAdvice
public class GlobalExceptionHandler{
        /**
     *  處理參數(shù)校驗異常
     */
    @ExceptionHandler({MethodArgumentNotValidException.class})
    @ResponseBody
    public ErrorResponseData validateException(MethodArgumentNotValidException e) {
        log.error("參數(shù)異常"+e.getBindingResult().getFieldError().getDefaultMessage(),e);
        return new ErrorResponseData(10001,e.getBindingResult().getFieldError().getDefaultMessage());
    }
    /**
     *  處理json轉(zhuǎn)換異常(比如 @DateTimeFormat注解轉(zhuǎn)換日期格式時)
     */
    @ExceptionHandler({HttpMessageNotReadableException.class})
    @ResponseBody
    public ErrorResponseData jsonParseException(HttpMessageNotReadableException e) {
        log.error("參數(shù)異常"+e.getLocalizedMessage(),e);
        return new ErrorResponseData(10001,e.getCause().getMessage());
    }
}

以上就是詳解Springboot如何優(yōu)雅的進行數(shù)據(jù)校驗的詳細內(nèi)容,更多關(guān)于Springboot 數(shù)據(jù)校驗的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • spring boot整合spring-kafka實現(xiàn)發(fā)送接收消息實例代碼

    spring boot整合spring-kafka實現(xiàn)發(fā)送接收消息實例代碼

    這篇文章主要給大家介紹了關(guān)于spring-boot整合spring-kafka實現(xiàn)發(fā)送接收消息的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來看看吧。
    2017-06-06
  • SpringMVC中ModelAndView用法小結(jié)

    SpringMVC中ModelAndView用法小結(jié)

    本文主要介紹了SpringMVC中ModelAndView用法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • SpringBoot實現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)

    SpringBoot實現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)

    項目開發(fā)中經(jīng)常會遇到多數(shù)據(jù)源同時使用的場景,比如冷熱數(shù)據(jù)的查詢等情況,所以接下來本文就來介紹一下如何使用實現(xiàn)自定義注解的形式來實現(xiàn)動態(tài)數(shù)據(jù)源切換吧
    2023-12-12
  • Spring高階用法之自定義業(yè)務(wù)對象組件化

    Spring高階用法之自定義業(yè)務(wù)對象組件化

    這篇文章主要介紹了Spring高階用法之自定義業(yè)務(wù)對象組件化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • IDEA2020 Plugins不能用的解決辦法及Plugins 搜索不了插件的問題

    IDEA2020 Plugins不能用的解決辦法及Plugins 搜索不了插件的問題

    這篇文章主要介紹了IDEA2020 Plugins不能用的解決辦法,文中給大家介紹了Intellij IDEA 2020.1 的Plugins 搜索不了插件,連接超時的問題,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2020-06-06
  • Java中的遞增i++與++i的實現(xiàn)原理詳解

    Java中的遞增i++與++i的實現(xiàn)原理詳解

    這篇文章主要介紹了Java中的i++與++i的實現(xiàn)原理詳解,在Java中,i++是一種常見的遞增操作符,用于將變量i的值增加1,它是一種簡潔且方便的方式來實現(xiàn)循環(huán)和計數(shù)功能,i++可以用于各種情況,本文來看一下其實現(xiàn)原理,需要的朋友可以參考下
    2023-10-10
  • SpringBoot集成Redis使用Cache緩存的實現(xiàn)方法

    SpringBoot集成Redis使用Cache緩存的實現(xiàn)方法

    SpringBoot通過配置RedisConfig類和使用Cache注解可以輕松集成Redis實現(xiàn)緩存,主要包括@EnableCaching開啟緩存,自定義key生成器,改變序列化規(guī)則,以及配置RedisCacheManager,本文為使用SpringBoot與Redis處理緩存提供了詳實的指導和示例,感興趣的朋友一起看看吧
    2024-10-10
  • SpringBoot構(gòu)建RESTful API的實現(xiàn)示例

    SpringBoot構(gòu)建RESTful API的實現(xiàn)示例

    本文主要介紹了SpringBoot構(gòu)建RESTful API的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • idea無法切換分支報錯問題及解決

    idea無法切換分支報錯問題及解決

    這篇文章主要介紹了idea無法切換分支報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • springboot+vue實現(xiàn)登錄功能的最新方法整理

    springboot+vue實現(xiàn)登錄功能的最新方法整理

    最近做項目時使用到了springboot+vue實現(xiàn)登錄功能的技術(shù),所以下面這篇文章主要給大家介紹了關(guān)于springboot+vue實現(xiàn)登錄功能的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06

最新評論