最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引入依賴(lài)

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

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

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

驗(yàn)證 Controller 的輸入

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

驗(yàn)證請(qǐng)求體

驗(yàn)證請(qǐng)求體即使驗(yàn)證被 @RequestBody 注解標(biāo)記的方法參數(shù)。

PersonController

我們?cè)谛枰?yàn)證的參數(shù)上加上了@Valid注解,如果驗(yàn)證失敗,它將拋出MethodArgumentNotValidException。默認(rèn)情況下,Spring 會(huì)將此異常轉(zhuǎn)換為 HTTP Status 400(錯(cuò)誤請(qǐng)求)。

@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 驗(yàn)證

驗(yàn)證請(qǐng)求參數(shù)

驗(yàn)證請(qǐng)求參數(shù)(Path Variables 和 Request Parameters)即是驗(yàn)證被 @PathVariable 以及 @RequestParam 標(biāo)記的方法參數(shù)。

PersonController

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

使用 Postman 驗(yàn)證

嵌套校驗(yàn)

在一個(gè)校驗(yàn)A對(duì)象里另一個(gè)B對(duì)象里的參數(shù)

需要在B對(duì)象上加上@Valid注解

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

JSR303 定義了 Bean Validation(校驗(yàn))的標(biāo)準(zhǔn) validation-api,并沒(méi)有提供實(shí)現(xiàn)。Hibernate Validation是對(duì)這個(gè)規(guī)范/規(guī)范的實(shí)現(xiàn) hibernate-validator,并且增加了 @Email、@Length、@Range 等注解。Spring Validation 底層依賴(lài)的就是Hibernate Validation。

JSR 提供的校驗(yàn)注解:

  • @Null 被注釋的元素必須為 null
  • @NotNull 被注釋的元素必須不為 null
  • @AssertTrue 被注釋的元素必須為 true
  • @AssertFalse 被注釋的元素必須為 false
  • @Min(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值
  • @Max(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值
  • @DecimalMin(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值
  • @DecimalMax(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值
  • @Size(max=, min=) 被注釋的元素的大小必須在指定的范圍內(nèi)
  • @Digits (integer, fraction) 被注釋的元素必須是一個(gè)數(shù)字,其值必須在可接受的范圍內(nèi)
  • @Past 被注釋的元素必須是一個(gè)過(guò)去的日期
  • @Future 被注釋的元素必須是一個(gè)將來(lái)的日期
  • @Pattern(regex=,flag=) 被注釋的元素必須符合指定的正則表達(dá)式

Hibernate Validator 提供的校驗(yàn)注解

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

@JsonFormat與@DateTimeFormat注解的使用

@JsonFormat用于后端傳給前端的時(shí)間格式轉(zhuǎn)換,@DateTimeFormat用于前端傳給后端的時(shí)間格式轉(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、在需要查詢(xún)時(shí)間的數(shù)據(jù)庫(kù)字段對(duì)應(yīng)的實(shí)體類(lèi)的屬性上添加@JsonFormat

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

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

DataTimeFormat

1、添加依賴(lài)

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

2、我們?cè)趯?duì)應(yīng)的接收前臺(tái)數(shù)據(jù)的對(duì)象的屬性上加@DateTimeFormat

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

3.這樣我們就可以將前端獲取的時(shí)間轉(zhuǎn)換為一個(gè)符合自定義格式的時(shí)間格式存儲(chǔ)到數(shù)據(jù)庫(kù)了 全局異常統(tǒng)一處理:攔截并處理校驗(yàn)出錯(cuò)的返回?cái)?shù)據(jù) 寫(xiě)一個(gè)全局異常處理類(lèi)

@ControllerAdvice
public class GlobalExceptionHandler{
        /**
     *  處理參數(shù)校驗(yàn)異常
     */
    @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)換日期格式時(shí))
     */
    @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)雅的進(jìn)行數(shù)據(jù)校驗(yàn)的詳細(xì)內(nèi)容,更多關(guān)于Springboot 數(shù)據(jù)校驗(yàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot Event實(shí)現(xiàn)異步消費(fèi)機(jī)制的示例代碼

    SpringBoot Event實(shí)現(xiàn)異步消費(fèi)機(jī)制的示例代碼

    這篇文章主要介紹了SpringBoot Event實(shí)現(xiàn)異步消費(fèi)機(jī)制,ApplicationEvent以及Listener是Spring為我們提供的一個(gè)事件監(jiān)聽(tīng)、訂閱的實(shí)現(xiàn),內(nèi)部實(shí)現(xiàn)原理是觀察者設(shè)計(jì)模式,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • springcloud連接遠(yuǎn)程nacos失敗顯示localhost服務(wù)連接失敗的問(wèn)題解決

    springcloud連接遠(yuǎn)程nacos失敗顯示localhost服務(wù)連接失敗的問(wèn)題解決

    這篇文章主要介紹了springcloud連接遠(yuǎn)程nacos失敗顯示localhost服務(wù)連接失敗的問(wèn)題解決,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家解決問(wèn)題有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • spring boot如何指定啟動(dòng)端口

    spring boot如何指定啟動(dòng)端口

    這篇文章主要介紹了spring boot如何指定啟動(dòng)端口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Pulsar負(fù)載均衡原理及優(yōu)化方案詳解

    Pulsar負(fù)載均衡原理及優(yōu)化方案詳解

    這篇文章主要為大家介紹了Pulsar負(fù)載均衡原理及優(yōu)化方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之二手書(shū)商城系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之二手書(shū)商城系統(tǒng)的實(shí)現(xiàn)

    這是一個(gè)使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP開(kāi)發(fā)的二手書(shū)商城系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有在線(xiàn)書(shū)城該有的所有功能,感興趣的朋友快來(lái)看看吧
    2022-01-01
  • MyBatis-Plus逆向工程——Generator的使用

    MyBatis-Plus逆向工程——Generator的使用

    這篇文章主要介紹了MyBatis-Plus逆向工程——Generator的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 一文詳解Java應(yīng)用頻繁Full GC的原因與調(diào)優(yōu)方案

    一文詳解Java應(yīng)用頻繁Full GC的原因與調(diào)優(yōu)方案

    在高并發(fā)的交易場(chǎng)景中,Java應(yīng)用的性能穩(wěn)定性直接影響用戶(hù)體驗(yàn),近期某交易平臺(tái)訂單服務(wù)在高峰期頻繁出現(xiàn)Full GC,導(dǎo)致服務(wù)暫停數(shù)秒,給用戶(hù)帶來(lái)了極差的使用感受,本文將結(jié)合該服務(wù)的實(shí)際場(chǎng)景,詳細(xì)講解Full GC的常見(jiàn)原因與調(diào)優(yōu)方案,需要的朋友可以參考下
    2025-09-09
  • idea2019配置Tomcat9全過(guò)程

    idea2019配置Tomcat9全過(guò)程

    這篇文章主要介紹了idea2019配置Tomcat9全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-11-11
  • Spring Boot的filter(過(guò)濾器)簡(jiǎn)單使用實(shí)例詳解

    Spring Boot的filter(過(guò)濾器)簡(jiǎn)單使用實(shí)例詳解

    過(guò)濾器(Filter)的注冊(cè)方法和 Servlet 一樣,有兩種方式:代碼注冊(cè)或者注解注冊(cè),下面通過(guò)實(shí)例給大家介紹Spring Boot的filter(過(guò)濾器)簡(jiǎn)單使用,一起看看吧
    2017-04-04
  • MyBatis配置數(shù)據(jù)庫(kù)連接并實(shí)現(xiàn)交互的操作步驟

    MyBatis配置數(shù)據(jù)庫(kù)連接并實(shí)現(xiàn)交互的操作步驟

    這篇文章主要介紹了MyBatis配置數(shù)據(jù)庫(kù)連接并實(shí)現(xiàn)交互的操作步驟,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04

最新評(píng)論

哈巴河县| 安平县| 文昌市| 新津县| 吉水县| 文水县| 从化市| 东至县| 凤阳县| 台东市| 博罗县| 新巴尔虎右旗| 木里| 井研县| 且末县| 舞阳县| 襄汾县| 方城县| 会同县| 永清县| 保康县| 湟中县| 乌拉特前旗| 石首市| 闽清县| 遂宁市| 黔江区| 时尚| 宝清县| 丹阳市| 静乐县| 龙南县| 芜湖市| 灵宝市| 怀宁县| 曲周县| 繁峙县| 堆龙德庆县| 齐齐哈尔市| 新昌县| 汤原县|