@Valid 校驗(yàn)無(wú)效,BindingResult未獲得錯(cuò)誤的解決
@Valid 校驗(yàn)失效
問題描述
使用@Valid校驗(yàn)實(shí)體類中的屬性stuTele
import javax.validation.constraints.Size; ... @Size(min = 11,max = 11,message = "請(qǐng)輸入11位手機(jī)號(hào)碼") private String stuTele;
Controller中,用@Valid注解對(duì)傳入的student對(duì)象屬性值校驗(yàn)
public String updateStuMsg(@Valid Student student, BindingResult bindingResult, Model model, HttpSession httpSession){......}
在傳入錯(cuò)誤參數(shù)后,發(fā)現(xiàn)bindingResult中記錄的error為0,說明校驗(yàn)無(wú)效
解決過程
檢查引入的依賴:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.1.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
在將hibernate-validator的版本切換到 5.4.1.Final 后,發(fā)現(xiàn)校驗(yàn)正常
所以定位為依賴的版本問題。
我的springboot版本為2.5.1,在將依賴替換為下面的內(nèi)容后,校驗(yàn)生效
<!-- 此處沒有指定版本<version>,默認(rèn)會(huì)使用和當(dāng)前springboot匹配的版本也就是2.5.1 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
進(jìn)入spring-boot-starter-validation 里面,查看它的依賴項(xiàng),其中有這樣一條
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
<scope>compile</scope>
</dependency>
所以在外部修改依賴的時(shí)候,也可以直接使用這一版本。
validation-api 這條依賴可以不用保留。
那么最新的7.0.1.Final版本該如何使用?官方文檔里是這樣說的
Jakarta Bean Validation 定義了與 CDI(Jakarta EE 的上下文和依賴注入)的集成點(diǎn)。如果您的應(yīng)用程序在不提供這種開箱即用集成的環(huán)境中運(yùn)行,您可以通過將以下 Maven 依賴項(xiàng)添加到您的 POM 來使用 Hibernate Validator CDI 可移植擴(kuò)展:
示例 1.3:Hibernate Validator CDI 可移植擴(kuò)展 Maven 依賴項(xiàng)
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>7.0.1.Final</version>
</dependency>
請(qǐng)注意,在 Java EE 應(yīng)用程序服務(wù)器上運(yùn)行的應(yīng)用程序通常不需要添加此依賴項(xiàng)。
那么,只需要把前面的依賴都替換成這一條,就可以了
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>7.0.1.Final</version>
</dependency>
使用bindingResult做參數(shù)校驗(yàn)
在控制類中
@RequestMapping("/create")
public void create(@Valid OrderForm orderForm, BindingResult bindingResult){
if(bindingResult.hasErrors()){
log.error("【創(chuàng)建訂單參數(shù)不正確】,orderForm={}",orderForm);
//bindingResult.getFieldError().getDefaultMessage()可以獲取到錯(cuò)誤的提示
throw new OrderException(ResultEnums.PARAM_ERROR.getCode(),bindingResult.getFieldError().getDefaultMessage());
}
}
實(shí)體類OrderForm
@Data
public class OrderForm {
@NotEmpty(message = "姓名必填")
private String name;//買家姓名
@NotEmpty(message = "手機(jī)號(hào)必填")
private String phone;//買家手機(jī)號(hào)
@NotEmpty(message = "地址必填")
private String address;//買家地址
@NotEmpty(message = "openid必填")
private String openid;//買家微信
@NotEmpty(message = "購(gòu)物車不能為空")
private String items;//購(gòu)物車
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- @valid 無(wú)法觸發(fā)BindingResult的解決
- springmvc項(xiàng)目使用@Valid+BindingResult遇到的問題
- 使用@Valid+BindingResult進(jìn)行controller參數(shù)校驗(yàn)方式
- 使用BindingResult 自定義錯(cuò)誤信息
- 使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式
- 使用@Validated 和 BindingResult 遇到的坑及解決
- 關(guān)于BindingResult的使用總結(jié)及注意事項(xiàng)
相關(guān)文章
Spring?Boot?Actuator?漏洞利用小結(jié)
spring對(duì)應(yīng)兩個(gè)版本,分別是Spring Boot 2.x和Spring Boot 1.x,因此后面漏洞利用的payload也會(huì)有所不同,這篇文章主要介紹了Spring?Boot?Actuator?漏洞利用小結(jié),需要的朋友可以參考下2023-11-11
jstack報(bào)錯(cuò)Unable to open socket file解決
這篇文章主要為大家介紹了jstack報(bào)錯(cuò)Unable to open socket file的解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02
Dubbo?retries?超時(shí)重試機(jī)制的問題原因分析及解決方案
這篇文章主要介紹了Dubbo?retries?超時(shí)重試機(jī)制的問題,解決方案是通過修改dubbo服務(wù)提供方,將timeout超時(shí)設(shè)為20000ms或者設(shè)置retries=“0”,禁用超時(shí)重試機(jī)制,感興趣的朋友跟隨小編一起看看吧2022-04-04
SpringBoot+Vue+Axios+BootStrap實(shí)現(xiàn)圖書的增刪改查功能示例
本文主要介紹了SpringBoot+Vue+Axios+BootStrap實(shí)現(xiàn)圖書的增刪改查功能,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
SpringBoot啟動(dòng)時(shí)如何修改上下文
本文介紹了如何在Spring Boot啟動(dòng)時(shí)修改上下文,以便加載封裝JAR中的國(guó)際化文件,通過在resources目錄下的META-INF文件夾中的spring.factories文件中配置指定類,可以實(shí)現(xiàn)這一功能2024-11-11
Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼
這篇文章主要介紹了Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼,需要的朋友可以參考下2018-11-11
Java+ElasticSearch+Pytorch實(shí)現(xiàn)以圖搜圖功能
這篇文章主要為大家詳細(xì)介紹了Java如何利用ElasticSearch和Pytorch實(shí)現(xiàn)以圖搜圖功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-06-06

