如何解決Spring in action @valid驗證不生效的問題
解決Spring in action @valid驗證不生效
按照書上的示例代碼來實現但是,添加瞭驗證但是沒有生效。
Spring提供瞭校驗Api是使用但是沒有提供實現,所以需要自己導入實現包。
所以導入實現包:
<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來導入一些jar報的時候,還是會提示找不到(不知道是不是因為使用的Xampp自帶的tomcat的原因)。之前的解決辦法就是把Jar包丟到Tomcat的lib文件夾下。
於是就把上面Maven下載下來的兩個jar包丟瞭進去,果然發生瞭一些變化,這次出現瞭報錯,程序不能正常運行。
報錯:
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導入的包在運行的時候不生效的問題,就是不報錯,但是運行的時候nodefClass錯誤。
找到解決辦法:解決idea導入maven項目缺少jar包的問題方法
springboot @Validate不生效的原因
使用validate相關註解卻沒用生效的問題
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之間,隻能包含字符、數字和下劃線") private String password; }
解決思路
引入hibernate相關依賴
<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>
相關配置
@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(); } }
全局攔截驗證錯誤
@RestControllerAdvice public class WebGlobalExceptionHandler { // private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 攔截JSON參數校驗 */ // @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()); } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- @Valid 校驗無效,BindingResult未獲得錯誤的解決
- springmvc項目使用@Valid+BindingResult遇到的問題
- SpringBoot參數校驗的最佳實戰教程
- springboot 參數格式校驗操作
- Java中的Valid和Validated的比較內容