软件编程
位置:首页>> 软件编程>> java编程>> 如何解决Spring in action @valid验证不生效的问题

如何解决Spring in action @valid验证不生效的问题

作者:codexjli  发布时间:2023-08-29 07:59:56 

标签:Spring,@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());
   }
}

来源:https://blog.csdn.net/codexjli/article/details/89639577

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com