溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式

發(fā)布時(shí)間:2021-10-25 18:27:30 來源:億速云 閱讀:250 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“如何使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式”吧!

目錄
  • 注解@Validated和BindingResult對(duì)入?yún)⒎强招r?yàn)

  • @Validated 和 BindingResult 使用遇到的坑

注解@Validated和BindingResult對(duì)入?yún)⒎强招r?yàn)

在項(xiàng)目當(dāng)中少不了入?yún)⑿r?yàn),服務(wù)器和瀏覽器互不信任,不能因?yàn)榍岸思尤雲(yún)⑴袛嗔撕笈_(tái)就不處理了,這樣是不對(duì)的。

比如前臺(tái)傳過來一個(gè)對(duì)象作為入?yún)?shù),這個(gè)對(duì)象中有些屬性允許為空,有些屬性不允許為空。那么你還在使用if()else{}進(jìn)行非空判斷嗎?不妨嘗試下使用注解,可以使用@Validated和BindingResult

注意:BindingResult需要放到@Validated后面

示例代碼如下:普通屬性可以用@NotEmpty() 特殊的使用@NotNull() 比如:枚舉類型

實(shí)體類:什么不允許為空就加

@NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "學(xué)校名不能為空")

注意:重要的事情叮囑兩遍。public interface SchoolGroup{} 別忘了加這個(gè)!public interface SchoolGroup{} 別忘了加這個(gè)!

public class SchoolDTO implements Serializable { 
    private Long id;
    @NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "學(xué)校名不能為空")
    private String schoolName;
 
    @NotNull
    @NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "學(xué)校負(fù)責(zé)人不能為空")
    private String schoolPrincipal;
 
    @NotNull
    @NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "職務(wù)不能為空")
    private String principalPosition;
 
    @NotNull
    @NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "聯(lián)系電話不能為空")
    private String schoolPhone; 
    //getter setter tostring 省略
    public interface SchoolGroup{}  別忘了加這個(gè)
}

控制層:在入?yún)?duì)象上加@Validated({SchoolDTO.SchoolGroup.class}), BindingResult bindingResult @Validated進(jìn)行驗(yàn)證,BindingResult可以獲取校驗(yàn)錯(cuò)誤信息

  @PostMapping("/schools")
    @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")")
    public Map<String,Object> createSchool(@RequestBody @Validated({SchoolDTO.SchoolGroup.class}) SchoolDTO schoolDTO,BindingResult bindingResult) throws Exception {
      //返回校驗(yàn)錯(cuò)誤信息
        Map<String,Object>map=new HashMap<>();
        if(bindingResult.hasErrors()){
            map.put("success","false");
            map.put("message",bindingResult.getAllErrors());
            return map;
        }
        // .........業(yè)務(wù)省略 
            return map;
        }
    }

測(cè)試:入?yún)⒌臅r(shí)候我沒有傳principalPosition和schoolPhone

如何使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式

@Validated 和 BindingResult 使用遇到的坑

@Validated 與BindingResult 需要相鄰,否則 變量result 不能接受錯(cuò)誤信息

控制臺(tái)輸出

Field error in object 'entity' on field '變量': rejected value [null]; codes [NotNull.entity.變量,NotNull.變量,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes

正確的內(nèi)容截圖

如何使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式

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

到此,相信大家對(duì)“如何使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)
AI