如何解決Spring in action @valid驗證不生效的問題
解決Spring in action @valid驗證不生效
按照書上的示例代碼來實現(xiàn)但是,添加了驗證但是沒有生效。
Spring提供了校驗Api是使用但是沒有提供實現(xiàn),所以需要自己導(dǎo)入實現(xiàn)包。
所以導(dǎo)入實現(xiàn)包:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
但是還是沒有解決問題,程序正常運行,校驗不生效。
想到之前用Maven來導(dǎo)入一些jar報的時候,還是會提示找不到(不知道是不是因為使用的Xampp自帶的tomcat的原因)。之前的解決辦法就是把Jar包丟到Tomcat的lib文件夾下。
于是就把上面Maven下載下來的兩個jar包丟了進去,果然發(fā)生了一些變化,這次出現(xiàn)了報錯,程序不能正常運行。
報錯:
Hibernate Validator java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImpl
然后查找解決辦法,在Stack Overflow上找到了解決辦法,缺少org.jboss.logging和com.fasterxml classmate包,所以在Maven中加入
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.2.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>classmate</artifactId>
<version>1.3.4</version>
</dependency>
但是還是沒有解決問題,使用老辦法,把這兩個Jar包丟到Tomcat的lib文件夾下,問題解決。
最近遇到好多Maven導(dǎo)入的包在運行的時候不生效的問題,就是不報錯,但是運行的時候nodefClass錯誤。
找到解決辦法:解決idea導(dǎo)入maven項目缺少jar包的問題方法
springboot @Validate不生效的原因
使用validate相關(guān)注解卻沒用生效的問題
public class LoginRequest implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "手機號", required = true, example = "18888888")
@Pattern(regexp = RegularConstants.PHONE, message = "手機號碼格式錯誤")
@JsonProperty(value = "phone")
private String phone;
@ApiModelProperty(value = "密碼", required = true, example = "1~[6,18]")
@Pattern(regexp = RegularConstants.PASSWORD, message = "密碼格式錯誤,密碼必須以字母開頭,長度在6~18之間,只能包含字符、數(shù)字和下劃線")
private String password;
}
解決思路
引入hibernate相關(guān)依賴
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.21.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
相關(guān)配置
@Configuration
public class ValidatorConfiguration {
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
.addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
return validatorFactory.getValidator();
}
}
全局?jǐn)r截驗證錯誤
@RestControllerAdvice
public class WebGlobalExceptionHandler {
// private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 攔截JSON參數(shù)校驗
*/
// @ResponseStatus(HttpStatus.OK)
@ExceptionHandler(MethodArgumentNotValidException.class)
public CommonResult bindException(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
return CommonResult.failed(ExceptionCodeEnum.VALIDATE_FAILED,Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
}
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot實戰(zhàn)之靜態(tài)資源處理
這篇文章主要介紹了Spring Boot實戰(zhàn)之靜態(tài)資源處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
一文帶你了解SpringBoot中啟動參數(shù)的各種用法
在使用 Spring Boot開發(fā)應(yīng)用時,我們通常需要根據(jù)不同的環(huán)境或特定需求調(diào)整啟動參數(shù),那么,Spring Boot 提供了哪些方式來配置這些啟動參數(shù)呢,下面小編就來和大家介紹一下吧2025-03-03
SpringBoot中如何解決讀取properties文件讀取問題
這篇文章主要介紹了SpringBoot中如何解決讀取properties文件讀取問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
springboot?filter配置多個時,執(zhí)行順序問題
這篇文章主要介紹了springboot?filter配置多個時,執(zhí)行順序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Mybatis?Plus?QueryWrapper復(fù)合用法詳解
這篇文章主要介紹了Mybatis?Plus?QueryWrapper復(fù)合用法詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01

