一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

2022-02-23 13:12linlangleo Java教程

這篇文章主要介紹了解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效

最近在做的公司項(xiàng)目是一個(gè)表單系統(tǒng),剛好要用到@Validated注解來(lái)對(duì)表單字段進(jìn)行驗(yàn)證。第一次使用遇到了一些坑,問(wèn)了同事之后,總算是掌握了。

步驟

首先,在dto實(shí)體你想要做驗(yàn)證的屬性前,加上@NotBlank/NotNull/NotEmpty注解:

解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

他們的區(qū)別如下:

  • @NotBlank:只用在String上,表示傳進(jìn)來(lái)的值不能為null,而且調(diào)用trim()后,長(zhǎng)度必須大于0
  • @NotNull:不能為null,但可以為empty(分配了內(nèi)存空間,但值為空)
  • @NotEmpty:不能為null,而且長(zhǎng)度必須大于0

然后在service層接口前添加注解@Validated

解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

然后運(yùn)行,給屬性傳遞空值,發(fā)現(xiàn)沒有任何反應(yīng);是因?yàn)闆]在接口方法的參數(shù)前加上@Valid注解,如下所示:

解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

加上后再運(yùn)行,傳遞空值,成功報(bào)錯(cuò)。 (同時(shí),以上總結(jié)可以加在controller層進(jìn)行驗(yàn)證,@valid同樣加在方法參數(shù)前,@validated加在controller類名前圖

解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

同樣能起效果)

內(nèi)層對(duì)象無(wú)法驗(yàn)證

做到后面發(fā)現(xiàn)傳遞的對(duì)象里面還有一個(gè)對(duì)象,要對(duì)里面的對(duì)象進(jìn)行驗(yàn)證,這時(shí)候是驗(yàn)證不到的

解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

需要在里面對(duì)象前也加上總結(jié)@valid,這樣,無(wú)論嵌套多少,都可以驗(yàn)證

解決@Validated注解無(wú)效,嵌套對(duì)象屬性的@NotBlank無(wú)效問(wèn)題

(對(duì)于對(duì)象泛型,也能驗(yàn)證成功)

 

@Validated注解不生效問(wèn)題、如何使用

1、需要引入的包

(缺少其中一個(gè)包,項(xiàng)目會(huì)報(bào)錯(cuò),或者validate注解不生效)

  • hibernate-validator-6.0.14.Final.jar
  • jboss-logging-3.3.2.Final.jar
  • validation-api-2.0.1.Final.jar
  • classmate-1.4.0.jar

2、將@Validated打在controller中需要驗(yàn)證的實(shí)體類前面

@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(@Validated SysDept dept){       
}

3、在具體實(shí)體類中定義字段的驗(yàn)證規(guī)則

(這里注解可以放在字段上,或者是get方法上,放在set方法上,會(huì)報(bào)錯(cuò))

private String deptName; 
@NotBlank(message = "部門名稱不能為空")
@Size(min = 0, max = 30, message = "部門名稱長(zhǎng)度不能超過(guò)30個(gè)字符")
public String getDeptName(){
  return deptName;
}

4、數(shù)據(jù)格式校驗(yàn)

對(duì)其錯(cuò)誤進(jìn)行處理(全局異常處理),不進(jìn)行處理,會(huì)直接報(bào)400錯(cuò)誤

@ControllerAdvice

可以實(shí)現(xiàn)三個(gè)方面的功能:

  • 全局異常處理
  • 全局?jǐn)?shù)據(jù)綁定
  • 全局?jǐn)?shù)據(jù)預(yù)處理
@RestControllerAdvice
public class GlobalExceptionHandler{
  @ExceptionHandler(BindException.class)
  public ApiResult validatedBindException(BindException e){
      log.error(e.getMessage(), e);
      String message = e.getAllErrors().get(0).getDefaultMessage();
      return ApiResult .error(message);
  }
}

在controller中的方法中進(jìn)行單個(gè)參數(shù)校驗(yàn)注意事項(xiàng)

1、controller類上打上注解@Validated

2、方法參數(shù)上給出格式如:

public Result method(@NotNull @RequestParam("id") Long id) {

3、其中@RequestParam("id")必須加,否則驗(yàn)證無(wú)效

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

原文鏈接:https://blog.csdn.net/qq_35992900/article/details/80068680

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产欧美综合精品一区二区 | 2022超帅男同gayxxx | 国产免费丝袜调教视频 | 国产成人精品日本亚洲网站 | 极品主播的慰在线播放 | 国产三级精品久久三级国专区 | 小SAO货叫大声点妓女 | 欧美一级片免费 | 欧美成人午夜片一一在线观看 | 男人狂躁女人下半身 | 好 舒服 好 粗 好硬免费视频 | 爽好舒服使劲添高h视频 | 91传媒制片厂制作传媒破解版 | 日本老头4569gay | 免费一级欧美大片在线观看 | 极品蜜桃臀美女啪啪 | 精品在线播放 | 亚洲国产精品无圣光一区二区 | 我要看靠逼片 | 色琪琪原网站亚洲香蕉 | oneday日本在线观看完整版 | 东京干福利 | 婷色 | 四虎伊人 | 精品午夜久久网成年网 | 日韩亚洲欧美一区二区三区 | 国产高清在线视频一区二区三区 | 五月色综合婷婷综合俺来也 | 亚洲国产99在线精品一区69堂 | 亚洲成人视屏 | 日本加勒比在线播放 | 美女被吸乳得到大胸 | 色人阁小说 | 午夜福利体验免费体验区 | 欧美人畜| 欧美高清在线精品一区 | 欧美日韩国产在线人成 | 免费日本视频 | 久久视频这有精品63在线国产 | 亚洲尿尿| 人与动人物性行为zozo共患病 |