如何解決Spring in action @valid驗(yàn)證不生效的問(wèn)題
解決Spring in action @valid驗(yàn)證不生效
按照書(shū)上的示例代碼來(lái)實(shí)現(xiàn)但是,添加了驗(yàn)證但是沒(méi)有生效。
Spring提供了校驗(yàn)Api是使用但是沒(méi)有提供實(shí)現(xiàn),所以需要自己導(dǎo)入實(shí)現(xiàn)包。
所以導(dǎo)入實(shí)現(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>
但是還是沒(méi)有解決問(wèn)題,程序正常運(yùn)行,校驗(yàn)不生效。
想到之前用Maven來(lái)導(dǎo)入一些jar報(bào)的時(shí)候,還是會(huì)提示找不到(不知道是不是因?yàn)槭褂玫腦ampp自帶的tomcat的原因)。之前的解決辦法就是把Jar包丟到Tomcat的lib文件夾下。
于是就把上面Maven下載下來(lái)的兩個(gè)jar包丟了進(jìn)去,果然發(fā)生了一些變化,這次出現(xiàn)了報(bào)錯(cuò),程序不能正常運(yùn)行。
報(bào)錯(cuò):
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>
但是還是沒(méi)有解決問(wèn)題,使用老辦法,把這兩個(gè)Jar包丟到Tomcat的lib文件夾下,問(wèn)題解決。
最近遇到好多Maven導(dǎo)入的包在運(yùn)行的時(shí)候不生效的問(wèn)題,就是不報(bào)錯(cuò),但是運(yùn)行的時(shí)候nodefClass錯(cuò)誤。
找到解決辦法:解決idea導(dǎo)入maven項(xiàng)目缺少jar包的問(wèn)題方法
springboot @Validate不生效的原因
使用validate相關(guān)注解卻沒(méi)用生效的問(wèn)題
public class LoginRequest implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "手機(jī)號(hào)", required = true, example = "18888888") @Pattern(regexp = RegularConstants.PHONE, message = "手機(jī)號(hào)碼格式錯(cuò)誤") @JsonProperty(value = "phone") private String phone; @ApiModelProperty(value = "密碼", required = true, example = "1~[6,18]") @Pattern(regexp = RegularConstants.PASSWORD, message = "密碼格式錯(cuò)誤,密碼必須以字母開(kāi)頭,長(zhǎng)度在6~18之間,只能包含字符、數(shù)字和下劃線(xiàn)") private String password; }
解決思路
引入hibernate相關(guān)依賴(lài)
<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截驗(yàn)證錯(cuò)誤
@RestControllerAdvice public class WebGlobalExceptionHandler { // private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 攔截JSON參數(shù)校驗(yàn) */ // @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()); } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring的事件發(fā)布與監(jiān)聽(tīng)方式案例講解
今天去官網(wǎng)查看spring?boot資料時(shí),在特性中看見(jiàn)了系統(tǒng)的事件及監(jiān)聽(tīng)章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽(tīng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03Spring Boot利用Docker快速部署項(xiàng)目的完整步驟
這篇文章主要給大家介紹了關(guān)于Spring Boot利用Docker快速部署項(xiàng)目的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Mybatis?Lombok使用方法與復(fù)雜查詢(xún)介紹
Lombok是一種Java實(shí)用工具,可用來(lái)幫助開(kāi)發(fā)人員消除Java的冗長(zhǎng),尤其是對(duì)于簡(jiǎn)單的Java對(duì)象(POJO),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10Java中一些常見(jiàn)的并發(fā)集合類(lèi)的使用
并發(fā)集合是一種特殊的數(shù)據(jù)結(jié)構(gòu),它允許多個(gè)線(xiàn)程安全地訪(fǎng)問(wèn)和修改,本文主要介紹了Java中一些常見(jiàn)的并發(fā)集合類(lèi)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06Java內(nèi)部類(lèi)原理與用法實(shí)例總結(jié)
這篇文章主要介紹了Java內(nèi)部類(lèi)原理與用法,結(jié)合實(shí)例形式總結(jié)分析了非靜態(tài)內(nèi)部類(lèi)、靜態(tài)內(nèi)部類(lèi)、局部類(lèi)等相關(guān)概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-08-08Spring Boot 整合 Mockito提升Java單元測(cè)試的高效實(shí)踐案例
Mockito與Spring Boot的整合為Java開(kāi)發(fā)者提供了一套完整的解決方案,使得單元測(cè)試更為精準(zhǔn)、高效,從而確保了代碼質(zhì)量、降低了維護(hù)成本,并促進(jìn)了項(xiàng)目的持續(xù)集成與交付,感興趣的朋友跟隨小編一起看看吧2024-04-04基于String不可變字符與StringBuilder可變字符的效率問(wèn)題
這篇文章主要介紹了String不可變字符與StringBuilder可變字符的效率問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07