国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springboot引入校驗(yàn)注解

這篇具有很好參考價(jià)值的文章主要介紹了springboot引入校驗(yàn)注解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

引入依賴(lài)

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
  </dependency>
      <dependency>
            <groupId>jakarta.validation</groupId>
            <artifactId>jakarta.validation-api</artifactId>
            <version>2.0.1</version>
        </dependency>

常用校驗(yàn)注解

@Null(groups={Add.class}) 參數(shù)必須為null,group設(shè)置分組,默認(rèn)為default
@NotNull 參數(shù)不為null
@NotEmpty 參數(shù)不為null 且不為空集合,集合不為空
@NotBlank 參數(shù)不為null且不為空串,只能作用字符串類(lèi)型
@AssertFalse 被注釋的元素必須是false
@AssertTrue 被注釋的元素必須是true
@Min(value) 被注釋的元素必須為一個(gè)數(shù)字 >=
@Max(value) 被注釋的元素必須為一個(gè)數(shù)字 <=
@DecimalMin(“value”) >=
@DecimalMax(“value”) <=
@NegativeOrZero <=0
@Range(min,max) 被注釋的元素大小必須在指定的范圍內(nèi)
@Size(min ,max) 被注釋的元素大小必須在指定的范圍內(nèi)
@Email 被注釋的元素必須是電子郵箱地址
@Past 被注釋的元素必須是一個(gè)過(guò)去的日期
@PastOrPresent 被注釋的元素必須是一個(gè)過(guò)去的時(shí)間
@Future 被注釋的元素必須是一個(gè)將來(lái)的日期
@Pattern(regexp = “1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$”) 被注釋的元素必須是符合指定的正則表達(dá)式
@URL 被注釋的元素必須是鏈接地址

提示:除了@NotNull注解之外,其他參數(shù)校驗(yàn)注解只有參數(shù)不為空的時(shí)候才生效

一般校驗(yàn)注解都有一個(gè)message的屬性,這個(gè)屬性代表的是注解校驗(yàn)不通過(guò)時(shí)返回的錯(cuò)誤提示。

在controller層方法參數(shù)使用校驗(yàn)注解

  1. 首先需要在controller類(lèi)上面加上@Validated注解。
  2. 在參數(shù)前面加上校驗(yàn)注解。如@NotBlank(message = “名字不能為空”) String name

上述注解的包:
org.springframework.validation.annotation.Validated;
javax.validation.constraints.NotBlank;
注解參數(shù):message,當(dāng)不滿(mǎn)足校驗(yàn)條件的時(shí)候會(huì)拋出ConstraintViolationException異常,異常中會(huì)包含該message對(duì)應(yīng)的內(nèi)容----名字不能為空。

import org.springframework.validation.annotation.Validated;
import java.util.*;

@RestController
@Validated
public class TestController extends JeecgController<Test, TestService> {
    @PostMapping(value = "/test")
    Result<?> test(@RequestBody @NotBlank(message = "名字不能為空") String name,
                   @NotNull(message = "年齡不能為空") @Max(value = 30,message = "最大不能超過(guò)30") @Min(value = 18,message = "最小不能小于18") Integer age) {
        return null;
    }
}
效果(已處理)

springboot引入校驗(yàn)注解,springboot,spring boot,java,spring

在controller層的DTO對(duì)象使用校驗(yàn)注解

  1. 首先需要在controller類(lèi)上面加上@Validated注解。
  2. 在對(duì)象參數(shù)前面加上@Valid注解,并在對(duì)象內(nèi)使用校驗(yàn)注解
  3. 如果對(duì)象參數(shù)內(nèi)部還嵌套這其他對(duì)象,需要在對(duì)象屬性上面加上@Valid注解(這條和第二條原理差不多)

不滿(mǎn)足對(duì)象內(nèi)的校驗(yàn)時(shí),會(huì)拋出MethodArgumentNotValidException異常
上述注解的包:
org.springframework.validation.annotation.Validated;
javax.validation.Valid;

import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import java.util.*;

@RestController
@Validated
public class TestController extends JeecgController<Test, TestService> {
    @PostMapping(value = "/test")
    Result<?> test(@RequestBody @Valid TestDTO testDTO) {
        return testService.test(testDTO);
    }
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
@ApiModel(value = "testDTO")
public class TestDTO {
	@ApiModelProperty(value = "用戶(hù)id",required = true)
	@NotBlank(message = "用戶(hù)id不能為空")
	private String userId;

	@ApiModelProperty(value = "訂單id列表",required = true)
	@Size(min = 1, message = "至少要選擇一個(gè)訂單")
	private List<String> orderIdList;

	@ApiModelProperty(value = "是否通知顧客",required = true)
	@NotNull(message = "是否通知顧客不能為空")
	private Boolean notifyCustomer;
}
效果(已處理)

springboot引入校驗(yàn)注解,springboot,spring boot,java,spring

校驗(yàn)失敗返回

springboot引入校驗(yàn)注解,springboot,spring boot,java,spring

一般來(lái)說(shuō),項(xiàng)目都會(huì)定好響應(yīng)體的結(jié)構(gòu),直接拋異常返回的信息和預(yù)期不太符合。
這個(gè)時(shí)候就需要我們來(lái)全局精準(zhǔn)捕獲該異常并處理異常信息,按照符合標(biāo)準(zhǔn)的方式返回。

當(dāng)請(qǐng)求是GET請(qǐng)求,并且使用DTO對(duì)象接收參數(shù)時(shí),使用方式和POST請(qǐng)求使用DTO對(duì)象用法一樣,但是校驗(yàn)不通過(guò)的異常不一樣。GET請(qǐng)求拋出的異常是BindException。

@RestControllerAdvice
@Slf4j
public class ExceptionHandler {

    /**
     * 這個(gè)異常在校驗(yàn)不通過(guò)的時(shí)候就會(huì)拋出
     *
     * @param e
     * @return: Result<?>
     **/
        @ExceptionHandler({MethodArgumentNotValidException.class, ConstraintViolationException.class, BindException.class})
    public Result<?> handleMethodArgumentNotValidException(Exception e) {
        log.info("全局捕獲校驗(yàn)注解異常e={}", e.getMessage());
        Result<?> res = Result.ok();
        if (e instanceof MethodArgumentNotValidException) {
            MethodArgumentNotValidException notValidException = (MethodArgumentNotValidException) e;
            BindingResult bindingResult = notValidException.getBindingResult();
            List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
            String msg = fieldErrorList.stream().map(FieldError::getDefaultMessage).collect(Collectors.joining(","));
            return res.error511(msg);
        } else if (e instanceof ConstraintViolationException) {
            ConstraintViolationException violationException = (ConstraintViolationException) e;
            Set<ConstraintViolation<?>> constraintViolations = violationException.getConstraintViolations();
            String msg = constraintViolations.stream().map(o -> String.valueOf(o.getMessage())).collect(Collectors.joining(","));
            return res.error511(msg);
        } else if (e instanceof BindException) {
            BindException bindException = (BindException) e;
            BindingResult bindingResult = bindException.getBindingResult();
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            List<Object> collect = fieldErrors.stream().map(error -> error.getDefaultMessage()).collect(Collectors.toList());
            return res.error511(StringUtils.join(collect, ","));
        } else {
            return res.error511(e.getMessage());
        }
    }

    }

處理后:
springboot引入校驗(yàn)注解,springboot,spring boot,java,spring
參考:https://blog.csdn.net/qq_42956993/article/details/129199922文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-653433.html

到了這里,關(guān)于springboot引入校驗(yàn)注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java spring boot 注解、接口和問(wèn)題解決方法(持續(xù)更新)

    java spring boot 注解、接口和問(wèn)題解決方法(持續(xù)更新)

    @RestController ????????是SpringMVC框架中的一個(gè)注解,它結(jié)合了@Controller和@ResponseBody兩個(gè)注解的功能,用于標(biāo)記一個(gè)類(lèi)或者方法,表示該類(lèi)或方法用于處理HTTP請(qǐng)求,并將響應(yīng)的結(jié)果直接返回給客戶(hù)端,而不需要進(jìn)行視圖渲染 @Controller ????????是Spring Framework中的注解,用于

    2024年02月06日
    瀏覽(31)
  • Spring參數(shù)注解,支持?jǐn)?shù)組入?yún)ⅲ↙ist)校驗(yàn)

    2、對(duì)返回的校驗(yàn)信息異常進(jìn)行全局捕獲,封裝后返回。 參考 https://stackoverflow.com/questions/28150405/validation-of-a-list-of-objects-in-spring

    2024年02月11日
    瀏覽(21)
  • Springboot-- 注解字段校驗(yàn),并統(tǒng)一設(shè)置返回值

    Springboot-- 注解字段校驗(yàn),并統(tǒng)一設(shè)置返回值

    引包: import org.springframework.validation.annotation.Validated; 規(guī)則 @AssertFalse Boolean,boolean 驗(yàn)證注解的元素值是false @AssertTrue Boolean,boolean 驗(yàn)證注解的元素值是true @NotNull 任意類(lèi)型 驗(yàn)證注解的元素值不是null @Null 任意類(lèi)型 驗(yàn)證注解的元素值是null @Min(value=值) BigDecimal,BigInteger, byte,short,

    2024年02月11日
    瀏覽(33)
  • Springboot——@valid 做字段校驗(yàn)和自定義注解

    Springboot——@valid 做字段校驗(yàn)和自定義注解

    再項(xiàng)目開(kāi)發(fā)中,針對(duì)前端傳遞的參數(shù)信息,有些接口中需要寫(xiě)大量的 if 判斷,導(dǎo)致代碼臃腫,不夠優(yōu)雅。 此時(shí),可以使用 @Valid 實(shí)現(xiàn)基本的字段校驗(yàn)。 springboot 2.3之前 ,直接進(jìn)行開(kāi)發(fā)即可,無(wú)需引用額外的依賴(lài) 集成在 spring-boot-starter-web 中。 springboot 2.3之后 需要額外引入

    2023年04月26日
    瀏覽(22)
  • SpringBoot校驗(yàn),DTO文件中常用的注解應(yīng)用案例.

    目錄 1、需要引入的Maven依賴(lài) 2、CompanyDTO 文件 3、對(duì) DTO文件中使用的校驗(yàn)注解說(shuō)明 參考文章: ? ? ? ?在觀看本篇文章之前,可以先參考我之前寫(xiě)的一篇文章 “?Spring5,Service層對(duì)DTO文件進(jìn)行數(shù)據(jù)格式校驗(yàn). ”? ,這篇文章是介紹在 Service層 對(duì)DTO文件的校驗(yàn)。 以下方的?Compa

    2024年02月12日
    瀏覽(13)
  • Java 4種校驗(yàn)注解(值校驗(yàn)、范圍校驗(yàn)、長(zhǎng)度校驗(yàn)、格式校驗(yàn))

    1 值校驗(yàn) 1.1 @NotNull注解 被注解的元素必須不為空,一般 用于數(shù)值類(lèi)型的參數(shù)校驗(yàn) @NotNull(message = \\\"用戶(hù)編號(hào)不能為空\(chéng)\\") private Integer userId; 1.2 @NotBlank注解 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長(zhǎng)度為0),并且類(lèi)型為String。 @NotBlank(message = \\\"用戶(hù)名稱(chēng)不能為空\(chéng)\\") pr

    2024年02月16日
    瀏覽(22)
  • Spring boot Websocket 添加授權(quán)校驗(yàn)(校驗(yàn)Header)

    Spring boot Websocket 添加授權(quán)校驗(yàn)(校驗(yàn)Header)

    ????????最近需要用到websocket,并且確認(rèn)是在登錄成功的情況下才能連接,看了下,websocket 5.8以上已經(jīng)支持校驗(yàn)了,但是由于我項(xiàng)目是spring boot 2.7.9,為了兼容,只能考慮通過(guò)在websocket 的header中帶上驗(yàn)證信息,進(jìn)行校驗(yàn),詳細(xì)如下 1.首先往spring boot pom 內(nèi)加入 websocket的依賴(lài)

    2024年02月07日
    瀏覽(26)
  • Spring Boot中參數(shù)校驗(yàn)

    Spring Boot中參數(shù)校驗(yàn)

    為了保證數(shù)據(jù)的正確性、完整性,前后端都需要進(jìn)行數(shù)據(jù)檢驗(yàn)。作為一名后端開(kāi)發(fā)工程師,不能僅僅依靠前端來(lái)校驗(yàn)數(shù)據(jù),我們還需要對(duì)接口請(qǐng)求的參數(shù)進(jìn)行后端的校驗(yàn)。最常見(jiàn)的做法就是通過(guò)if/else語(yǔ)句來(lái)對(duì)請(qǐng)求的每一個(gè)參數(shù)一一校驗(yàn),當(dāng)很多參數(shù)需要校驗(yàn)的時(shí)候,if/else語(yǔ)

    2023年04月16日
    瀏覽(22)
  • SpringBoot Redis 注解 攔截器來(lái)實(shí)現(xiàn)接口冪等性校驗(yàn)

    冪等性,?通俗的說(shuō)就是一個(gè)接口,?多次發(fā)起同一個(gè)請(qǐng)求,?必須保證操作只能執(zhí)行一次 比如:訂單接口,?不能多次創(chuàng)建訂單 支付接口,?重復(fù)支付同一筆訂單只能扣一次錢(qián) 支付寶回調(diào)接口,?可能會(huì)多次回調(diào),?必須處理重復(fù)回調(diào) 普通表單提交接口,?因?yàn)榫W(wǎng)絡(luò)超時(shí)等原因多次點(diǎn)擊提

    2024年01月19日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包