【发布时间】:2019-04-08 15:19:32
【问题描述】:
我正在使用 Spring @Validated 注解来验证获取请求路径变量。我确实得到了一个我在@ControllerAdvice 类中处理的ConstraintViolationException,但问题是我想要该字段的名称并且我得到一个arg0 而不是名称本身(myField)
我知道我有类似的问题,但我尝试了以下但没有解决它。
我已经尝试过遍历异常
for (Iterator<ConstraintViolation<?>> iterator = set.iterator(); iterator.hasNext(); ) {
ConstraintViolation<?> next = iterator.next();
System.out.println(((PathImpl)next.getPropertyPath())
.getLeafNode().getName() + " " +next.getMessage());
}
以及使用 -parameters 编译(在 pom.xml 中)
<configuration>
<source>1.8</source>
<target>1.8</target>
<forceJavacCompilerUse>true</forceJavacCompilerUse>
<compilerArgs>
<arg>-parameters</arg>
同时为验证器创建一个配置文件,像这样:
@Bean
public Validator validator(){
final ValidatorFactory validatorFactory = Validation.byDefaultProvider()
.configure()
.parameterNameProvider(new ReflectionParameterNameProvider())
.buildValidatorFactory();
return validatorFactory.getValidator();
}
这是我正在验证的方法
public void method(@RequestParam(value = "myField") @Pattern(regexp = "^([A-Za-z0-9]+)$", message = "is not valid") String myField)
但毕竟,我在检查异常对象时仍然得到 arg0。 在 Spring Boot 1.5 中使用 Java 8
【问题讨论】:
-
在将 Spring Boot 版本从 2.2.13 升级到 2.5.6 后,我遇到了同样的问题。我无法在解析参数名称时配置要运行的测试...
标签: java spring-boot validation