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

springboot使用@Validated或@Valid注解校驗(yàn)參數(shù)方式

 更新時(shí)間:2024年07月10日 10:50:56   作者:平平常常一般牛  
這篇文章主要介紹了springboot使用@Validated或@Valid注解校驗(yàn)參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用@Validated注解校驗(yàn)參數(shù)

使用@Validated注解 校驗(yàn)參數(shù)是非常簡(jiǎn)潔和省代碼,減少工作量的一種很好用的方式,自用這個(gè)注解之前呢,我以前一直用的if判斷,這種方式非常麻煩,而且工作量大大加大了。

注解地方

@Validated:可以用在類、方法和方法參數(shù)上。

@Valid:可以用在方法、構(gòu)造函數(shù)、方法參數(shù)和成員屬性(字段)上

嵌套驗(yàn)證

  • 嵌套驗(yàn)證就是類嵌套類的驗(yàn)證,比如我要在集合上加一個(gè)@notnull的注解,要求該集合中的每一個(gè)對(duì)象都被驗(yàn)證,如果只用@Validated與@Valid是不會(huì)驗(yàn)證的。
  • 我們要用@Validated配合@Valid來(lái)進(jìn)行驗(yàn)證。

使用@Validated 注解,先在pom文件中加入依賴

<!-- 校驗(yàn)入?yún)?-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

使用示例

常用注解

下面的表格列出常用校驗(yàn)類及主要功能。

這些注解必須配合@Valid或@Validated使用,通過這兩個(gè)注解開啟校驗(yàn)。

注 :對(duì)于長(zhǎng)度的校驗(yàn)基本都支持字符串、集合、Map、數(shù)組的長(zhǎng)度。

下面是@Valid和@Validated的區(qū)別。

注 :嵌套驗(yàn)證。

JavaBean a中某個(gè)屬性類型是JavaBean b,對(duì)a進(jìn)行驗(yàn)證的同時(shí)驗(yàn)證b。

代碼示例

在實(shí)體類當(dāng)中定義需要校驗(yàn)的屬性參數(shù)

@Table
@Entity(name = "person")      // 這是一個(gè)標(biāo)記注釋,表明這個(gè)類是一個(gè)實(shí)體。這個(gè)注釋必須放在類名稱上。
@JsonIgnoreProperties(value = "hibernateLazyInitializer")
public class Student implements Serializable {
    @Id      //   此注釋位于持有持久標(biāo)識(shí)屬性的特定字段上。該字段被視為數(shù)據(jù)庫(kù)中的主鍵。
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    //后端設(shè)置名字限制
//    @Column標(biāo)記表示所持久化屬性所映射表中的字段
//      unique屬性表示該字段是否為唯一標(biāo)識(shí)
//      nullable屬性表示該字段是否可以為null值
    @Column(unique = true, nullable = false)
    @NotBlank(message = "名字不為空")
    @Length(message = "名字長(zhǎng)度在1-10之間", min = 1, max = 10)
    private String name;
    //后端設(shè)置性別限制
    private int sex;
    @NotBlank(message = "電話不能為空")
    @Length(message = "電話號(hào)碼長(zhǎng)度為4-8", min = 4, max = 11)
    private String telephone;
    @NotBlank(message = "身份證不能為空")
    @Length(message = "電話號(hào)碼長(zhǎng)度為17-18", min = 17, max = 18)
    private String card;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

在Controller控制器中校驗(yàn)接收參數(shù)

 //    添加——接收添加的數(shù)據(jù)
    @PostMapping("/doAdd")
    @ResponseBody
    public HttpResult doAdd(@Valid Student student){
        serviceStudent.doCreate(student);
        return HttpResult.success();
    }

在postman當(dāng)中模擬請(qǐng)求校驗(yàn)

{
    "timestamp": "2020-12-20T08:02:27.935+0000",
    "status": 400,
    "error": "Bad Request",
    "errors": [
        {
            "codes": [
                "NotBlank.student.telephone",
                "NotBlank.telephone",
                "NotBlank.java.lang.String",
                "NotBlank"
            ],
            "arguments": [
                {
                    "codes": [
                        "student.telephone",
                        "telephone"
                    ],
                    "arguments": null,
                    "defaultMessage": "telephone",
                    "code": "telephone"
                }
            ],
            "defaultMessage": "電話不能為空",
            "objectName": "student",
            "field": "telephone",
            "rejectedValue": null,
            "bindingFailure": false,
            "code": "NotBlank"
        },
        {
            "codes": [
                "NotBlank.student.card",
                "NotBlank.card",
                "NotBlank.java.lang.String",
                "NotBlank"
            ],
            "arguments": [
                {
                    "codes": [
                        "student.card",
                        "card"
                    ],
                    "arguments": null,
                    "defaultMessage": "card",
                    "code": "card"
                }
            ],
            "defaultMessage": "身份證不能為空",
            "objectName": "student",
            "field": "card",
            "rejectedValue": null,
            "bindingFailure": false,
            "code": "NotBlank"
        },
        {
            "codes": [
                "NotBlank.student.name",
                "NotBlank.name",
                "NotBlank.java.lang.String",
                "NotBlank"
            ],
            "arguments": [
                {
                    "codes": [
                        "student.name",
                        "name"
                    ],
                    "arguments": null,
                    "defaultMessage": "name",
                    "code": "name"
                }
            ],
            "defaultMessage": "名字不為空",
            "objectName": "student",
            "field": "name",
            "rejectedValue": null,
            "bindingFailure": false,
            "code": "NotBlank"
        }
    ],
    "message": "Validation failed for object='student'. Error count: 3",
    "trace": "org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 3 errors\nField error in object 'student' on field 'telephone': rejected value [null]; codes [NotBlank.student.telephone,NotBlank.telephone,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.telephone,telephone]; arguments []; default message [telephone]]; default message [電話不能為空]\nField error in object 'student' on field 'card': rejected value [null]; codes [NotBlank.student.card,NotBlank.card,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.card,card]; arguments []; default message [card]]; default message [身份證不能為空]\nField error in object 'student' on field 'name': rejected value [null]; codes [NotBlank.student.name,NotBlank.name,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.name,name]; arguments []; default message [name]]; default message [名字不為空]\r\n\tat org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:164)\r\n\tat org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)\r\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:660)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n\tat java.lang.Thread.run(Thread.java:748)\r\n",
    "path": "/student/doAdd"
}

這說明我們的校驗(yàn)已經(jīng)可以使用了~

總結(jié)

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

相關(guān)文章

  • MyBatis直接執(zhí)行SQL的工具SqlMapper

    MyBatis直接執(zhí)行SQL的工具SqlMapper

    今天小編就為大家分享一篇關(guān)于MyBatis直接執(zhí)行SQL的工具SqlMapper,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • java實(shí)現(xiàn)音頻轉(zhuǎn)文本的實(shí)現(xiàn)步驟

    java實(shí)現(xiàn)音頻轉(zhuǎn)文本的實(shí)現(xiàn)步驟

    本文主要介紹了java實(shí)現(xiàn)音頻轉(zhuǎn)文本的實(shí)現(xiàn)步驟,可以通過使用一些現(xiàn)成的庫(kù)或者API來(lái)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Java的DataInputStream和DataOutputStream數(shù)據(jù)輸入輸出流

    Java的DataInputStream和DataOutputStream數(shù)據(jù)輸入輸出流

    這里我們來(lái)看一下Java的DataInputStream和DataOutputStream數(shù)據(jù)輸入輸出流的使用示例,兩個(gè)類分別繼承于FilterInputStream和FilterOutputStream:
    2016-06-06
  • java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • SpringBoot整合WebService的實(shí)現(xiàn)示例

    SpringBoot整合WebService的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot整合WebService,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java訂單30分鐘未支付自動(dòng)取消該怎么實(shí)現(xiàn)

    Java訂單30分鐘未支付自動(dòng)取消該怎么實(shí)現(xiàn)

    在開發(fā)中往往會(huì)遇到一些關(guān)于延時(shí)任務(wù)的需求,例如生成訂單30分鐘未支付,則自動(dòng)取消,下面這篇文章主要給大家介紹了關(guān)于Java訂單30分鐘未支付自動(dòng)取消該怎么實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 快速解決idea @Autowired報(bào)紅線問題

    快速解決idea @Autowired報(bào)紅線問題

    這篇文章主要介紹了快速解決idea @Autowired報(bào)紅線問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-02-02
  • 基于SpringBoot bootstrap.yml配置未生效的解決

    基于SpringBoot bootstrap.yml配置未生效的解決

    這篇文章主要介紹了基于SpringBoot bootstrap.yml配置未生效的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-10-10
  • Mac?Maven環(huán)境搭建安裝和配置超詳細(xì)步驟

    Mac?Maven環(huán)境搭建安裝和配置超詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于Mac?Maven環(huán)境搭建安裝和配置的超詳細(xì)步驟,Maven是一種常用的Java構(gòu)建工具,它可以自動(dòng)化構(gòu)建、測(cè)試和打包Java項(xiàng)目,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 解決druid監(jiān)控頁(yè)面SQL不顯示的問題

    解決druid監(jiān)控頁(yè)面SQL不顯示的問題

    這篇文章主要介紹了解決druid監(jiān)控頁(yè)面SQL不顯示的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

石景山区| 武川县| 忻城县| 徐汇区| 太和县| 江油市| 广安市| 剑阁县| 台前县| 寻乌县| 宜兴市| 香港| 蒙山县| 元朗区| 富蕴县| 武定县| 乌鲁木齐县| 隆化县| 万年县| 龙山县| 西丰县| 荃湾区| 西充县| 公安县| 武汉市| 客服| 张掖市| 湄潭县| 平阴县| 镇原县| 宁海县| 寿光市| 尖扎县| 东台市| 长顺县| 密山市| 广东省| 嵊州市| 仙桃市| 长汀县| 高州市|