我的代码构建正常。但在启动过程中会失败,并出现以下错误:
Caused by: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:146)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:331)
at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:305)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$ValidatedLocalValidatorFactoryBean.<init>(ConfigurationPropertiesBindingPostProcessor.java:412)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.getValidator(ConfigurationPropertiesBindingPostProcessor.java:368)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.determineValidator(ConfigurationPropertiesBindingPostProcessor.java:352)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:314)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:291)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
... 63 more
从日志中可以清楚地看出,找不到ConfigurationState.getParameterNameProvider()
方法,这是由于验证API版本之间的冲突。我知道Hibernate-validator需要新版本的validation-api(1.1.0),但Spring却在某种程度上采用了第三方JAR中提供的validation-api类的旧版本。
我无法从构建过程中删除验证API类旧版本,因为它们内置了第三方jar,我需要它用于其他目的。
我试过几种选择:
而且
application.properties
中的spring.jpa.properties.javax.persistence.validation.mode=none
,但它们都不起作用。
Spring boot中是否有方法禁用BuildValidatorFactor
或LocalValidatorFactoryBean
来避免此错误?
在我的案例中,以下解决方案起到了帮助作用:
ValidatorFactoryBeanwithDisabledValidation.java
@Component
@Primary
@ConditionalOnProperty(prefix = "spring.custom.beans", name = "validator-factory-with-disabled-validation")
public class ValidatorFactoryBeanWithDisabledValidation extends OptionalValidatorFactoryBean {
@Override
public <T> Set<ConstraintViolation<T>> validate(final T object, final Class<?>... groups) {
return Set.of();
}
@Override
public <T> Set<ConstraintViolation<T>> validateProperty(final T object,
final String propertyName,
final Class<?>... groups) {
return Set.of();
}
@Override
public <T> Set<ConstraintViolation<T>> validateValue(final Class<T> beanType,
final String propertyName,
final Object value,
final Class<?>... groups) {
return Set.of();
}
@Override
public void validate(final Object target, final Errors errors) {
}
@Override
public void validate(final Object target, final Errors errors, final Object... validationHints) {
}
@Override
public void validateValue(final Class<?> targetType,
final String fieldName,
final Object value,
final Errors errors,
final Object... validationHints) {
}
}
应用程序.属性
spring.custom.beans.validator-factory-with-disabled-validation=true
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration
问题内容: 我已在中注释掉了csrf处理器和中间件产品线 但是,当我使用Ajax发送请求时,Django仍然会响应“ csrf令牌不正确或丢失”,并且在将X-CSRFToken添加到标头后,请求将会成功。 这里发生了什么 ? 问题答案: 如果只需要一些视图而不使用CSRF,则可以使用@csrf_exempt:
在尝试使用JSR-303(hibernate Validator)验证模型时,我在将
问题内容: 从詹金斯(Jenkins)创建工作时,出现以下错误。如何在Jenkins中禁用证书验证? 在Git Bash中,我可以使用命令来禁用它,但不确定如何从Jenkins使用它。 错误: 问题答案: 最好的选择是将自签名证书添加到您的证书存储中 获取服务器证书树这可以使用chrome完成。 导航到服务器地址。单击挂锁图标并查看证书。将所有证书链导出为base64编码文件(PEM)格式。 将证
我们使用的是spring core+struts(没有spring MVC)
问题内容: 正在运行我的表单(例如,跟踪原始,脏污等)。我不需要此功能;我确定这会增加我的费用。 如何关闭它? 问题答案: AFAIK没有简单的开关可以关闭AngularJS验证。实际上,大多数验证都发生在和输入指令中- 基本上是input.js文件中的代码。因此,要摆脱内置验证,您将不得不从该文件中重新开发代码(以及一些其他代码,例如select)。 您是否将验证代码标识为应用程序中的性能瓶颈?
我想你可以想象家务控制器中有什么,但为了完整起见,这里有相关的部分: 下面是测试在输出中打印的请求: 那么,为什么我的测试会得到401的返回代码,我如何修复它?