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

使用javax.validation.constraints對(duì)請(qǐng)求體進(jìn)行統(tǒng)一校驗(yàn)

 更新時(shí)間:2024年07月04日 08:54:05   作者:半山驚竹  
這篇文章主要介紹了使用javax.validation.constraints對(duì)請(qǐng)求體進(jìn)行統(tǒng)一校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、序言

在處理請(qǐng)求的時(shí)候,通常需要對(duì)參數(shù)進(jìn)行校驗(yàn)是否為空,參數(shù)的長(zhǎng)度等進(jìn)行校驗(yàn),

如果在controller層一個(gè)一個(gè)的寫校驗(yàn)就很麻煩,于是就有了javax.validation.constraints包。

二、注解類型

不同的注解用于不同的數(shù)據(jù)類型,小伙伴們可以下載源碼看一些常用的比如非空限制的注解的區(qū)別,

我這里截幾個(gè)圖:

所以我一般的處理是,如果是字符串類型就用@NotBlank,

如果是集合數(shù)組之類就用@NotEmpty,如果是對(duì)象就用@NotNull

當(dāng)然還有別的包的校驗(yàn)類型,比如限制請(qǐng)求參數(shù)的長(zhǎng)度就可以用到另外一個(gè)包里的注解了,在pom中增加依賴:

<dependency>
	<groupId>org.hibernate.validator</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>6.0.17.Final</version>
	<scope>compile</scope>
</dependency>

三、使用注解

3.1 請(qǐng)求實(shí)體類增加注解

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;


/**
 * @author FanHuiFang
 * @version 1.0
 * @date 2024年04月27日 19:58
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserSaveReq {
    @NotBlank(message = "name不能為空")
    private String name;

    @NotNull(message = "年齡不能為空")
    private Long age;

    @NotEmpty(message = "朋友列表不能為空")
    private List<String> friends;

    @NotNull(message = "客戶手機(jī)號(hào)不能為空")
    @Length(min = 8, max = 16, message = "客戶手機(jī)號(hào)不合法")
    private String userPhone;
}

3.2 控制層

import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import org.springframework.validation.Errors;

@PostMapping(value = "/saveUser")
public ResultBean<String> saveUser(@Valid @RequestBody UserSaveReq req, Errors errors) {
    if (Objects.isNull(req)) return ResultBean.fail("缺少必要的請(qǐng)求參數(shù)");
    if (errors.hasErrors() && Objects.nonNull(errors.getFieldError())) {
        String errorMessage = errors.getFieldError().getDefaultMessage();
        log.error("保存用戶信息時(shí)請(qǐng)求參數(shù)錯(cuò)誤:{}", errorMessage);
        return ResultBean.fail(errorMessage);
    }
    //保存處理......
    
}

當(dāng)進(jìn)行請(qǐng)求的時(shí)候,如果缺少某個(gè)參數(shù),或者比如長(zhǎng)度不對(duì),就會(huì)返回異常信息,這樣就不用一個(gè)個(gè)的進(jìn)行校驗(yàn)了。

注意:這里請(qǐng)求參數(shù)中需要加上@Valid注解,如果不加,應(yīng)該是校驗(yàn)沒有生效的

比如手機(jī)號(hào)號(hào)長(zhǎng)度不對(duì),就會(huì)返回

{
    "code": 0,
    "message": "客戶手機(jī)號(hào)不合法",
    "data": null
}

這里也附帶一下我用的ResultBean,以免看的云里霧里的:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;

/**
 * @author FanHuiFang
 * @version 1.0
 * @date 2024年04月27日 21:50
 */

@Builder
@Data
@AllArgsConstructor
@ToString
public class ResultBean<T> implements Serializable {
    private Integer code;
    private String message;
    private T data;


    public ResultBean(int code, String message, T data) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    public ResultBean(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public static <T> ResultBean<T> data(T data) {
        return data("操作成功", data);
    }

    public static <T> ResultBean<T> data(String message, T data) {
        return data(1, message, data);
    }

    public static <T> ResultBean<T> data(int code, String message, T data) {
        return new ResultBean<>(code, message, data);
    }


    public static <T> ResultBean<T> fail(String message, T data) {
        return new ResultBean<>(0, message, data);
    }

    public static <T> ResultBean<T> fail(Integer code, String message) {
        return new ResultBean<>(code, message);
    }

    public static <T> ResultBean<T> fail(String message) {
        return new ResultBean<>(0, message, null);
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java注解與反射原理說明

    Java注解與反射原理說明

    今天小編就為大家分享一篇關(guān)于Java注解與反射原理說明,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Mybatis分頁P(yáng)ageHelper插件代碼實(shí)例

    Mybatis分頁P(yáng)ageHelper插件代碼實(shí)例

    這篇文章主要介紹了Mybatis分頁P(yáng)ageHelper插件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 在SpringBoot啟動(dòng)時(shí)執(zhí)行特定代碼的常見方法小結(jié)

    在SpringBoot啟動(dòng)時(shí)執(zhí)行特定代碼的常見方法小結(jié)

    本文總結(jié)了SpringBoot啟動(dòng)時(shí)執(zhí)行代碼的5種方法,涵蓋@PostConstruct、CommandLineRunner、ApplicationRunner、ApplicationListener及@EventListener,各方法適用于不同場(chǎng)景,需要的朋友可以參考下
    2025-08-08
  • SpringBoot使用Validation校驗(yàn)參數(shù)的詳細(xì)過程

    SpringBoot使用Validation校驗(yàn)參數(shù)的詳細(xì)過程

    這篇文章主要介紹了SpringBoot使用Validation校驗(yàn)參數(shù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Spring定時(shí)任務(wù)之fixedRateString的實(shí)現(xiàn)示例

    Spring定時(shí)任務(wù)之fixedRateString的實(shí)現(xiàn)示例

    本文主要介紹了Spring定時(shí)任務(wù)之fixedRateString的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Java 中 AQS 的幾大經(jīng)典實(shí)現(xiàn)示例詳解

    Java 中 AQS 的幾大經(jīng)典實(shí)現(xiàn)示例詳解

    AQS是Java并發(fā)包中的一個(gè)核心基礎(chǔ)類,用于構(gòu)建高效、可擴(kuò)展的鎖和同步器,以下是Java中常見的基于AQS的實(shí)現(xiàn)類,每個(gè)實(shí)現(xiàn)都針對(duì)特定場(chǎng)景提供了同步功能,我會(huì)逐一介紹它們的主要用途、特點(diǎn),并提供一個(gè)簡(jiǎn)單的代碼示例,感興趣的朋友一起看看吧
    2025-09-09
  • 詳解Java中的JDK、JRE、JVM

    詳解Java中的JDK、JRE、JVM

    本文主要介紹了Java中的JDK、JRE、JVM的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • 淺談基于SpringBoot實(shí)現(xiàn)一個(gè)簡(jiǎn)單的權(quán)限控制注解

    淺談基于SpringBoot實(shí)現(xiàn)一個(gè)簡(jiǎn)單的權(quán)限控制注解

    這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)一個(gè)簡(jiǎn)單的權(quán)限控制注解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Linux 下通過 java 命令啟動(dòng) jar 包常見方式小結(jié)

    Linux 下通過 java 命令啟動(dòng) jar 包常見方式小結(jié)

    這篇文章主要介紹了Linux 下通過 java 命令啟動(dòng) jar 包常見方式小結(jié),后臺(tái)啟動(dòng)jar包命令大致有五種,每種方式結(jié)合代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2023-12-12
  • springboot訪問404問題的解決辦法

    springboot訪問404問題的解決辦法

    工作中遇到url404問題,解決問題的進(jìn)程比較崎嶇,寫篇文章記錄,下面這篇文章主要給大家介紹了關(guān)于springboot訪問404問題的解決辦法,文中通過圖文介紹的非常詳細(xì),要的朋友可以參考下
    2023-03-03

最新評(píng)論

黄平县| 通河县| 安远县| 温州市| 清徐县| 方城县| 镶黄旗| 四平市| 安泽县| 连南| 大理市| 楚雄市| 丰宁| 五莲县| 京山县| 三原县| 泰宁县| 华亭县| 边坝县| 丁青县| 晴隆县| 安陆市| 苏尼特右旗| 镇平县| 盐亭县| 韶山市| 隆德县| 灵石县| 鱼台县| 临潭县| 宾川县| 宁陕县| 鄄城县| 确山县| 华池县| 文昌市| 黄骅市| 岫岩| 缙云县| 麟游县| 双江|