spring-boot - JBoss EAP 7.1 + Spring Boot 应用程序:找不到约束“javax.validation.constraints.NotBlank”的验证器
问题描述
我正在尝试在 JBoss EAP 7.1 服务器上部署 Spring Boot (2.0.2) 应用程序。
导致问题的代码是:
import javax.validation.constraints.NotBlank;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
@Component
@Validated
public class AppProperties {
@NotBlank
private String name;
当应用程序部署在 JBoss 上时,出现以下异常:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
16:44:25,861 ERROR [org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter] (ServerService Thread Pool -- 6 7)
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under 'app' to com.example.security.config.AppProperties:
Property: app.contextpath
Value: /api
Origin: class path resource [application.yml]:5:18
Reason: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.String'. Check configuration for 'name'
Action:
Update your application's configuration
我尝试将具有以下内容的文件 jboss-deployment-structure.xml 添加到 WEB-INF/classes:
<jboss-deployment-structure>
<ear-subdeployments-isolated>true</ear-subdeployments-isolated>
<deployment>
<exclude-subsystems>
<subsystem name="jaxrs"/>
</exclude-subsystems>
<exclusions>
<module name="javaee.api"/>
<module name="javax.validation.api"/>
<module name="javax.faces.api"/>
<module name="org.hibernate.validator"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
但是,没有运气。解决方法是什么?提前致谢。
解决方案
尽管这个问题已经存在一年了,但我遇到了同样的问题并且找不到解决方案。
我知道,这适用于 Spring Boot 2.1.x 和 JBoss 7.1,不确定之前的版本。
我们显然需要排除org.hibernate.validator
和javax.validation.api
。不清楚的是我们还需要排除javax.faces.api
(它对 有传递依赖javax.validation.api
)。排除 javax.faces 会导致 JBoss 由于缺少 jsf 库而在启动时失败。然后我们可以简单地排除jsf
子系统。
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="jsf" />
</exclude-subsystems>
<exclusions>
<module name="javax.validation.api" />
<module name="javax.faces.api" />
<module name="org.hibernate.validator" />
</exclusions>
</deployment>
</jboss-deployment-structure>
假设您不需要来自 jboss 的 JSF,这应该可以工作。
推荐阅读
- java - 我的 for 循环中没有代码正在运行 - Java 8 SE
- regex - 搜索词后的 Regx 唯一数字
- swift - 如何在 Swift 中使用查询项解析 URL # 片段
- c# - 如何在 WCF 中序列化对象类型?
- javascript - 如何使用 Javascript 更改图像色调
- arrays - 将数组限制为多种特定数据类型
- typescript - TypeScript 编译看似无效的变量类型声明
- android - Android BLE 接收器/发送器堆栈 - 跨多个活动
- react-native - 使用 react-native-signature-capture 的多个签名保存在同一个文件中
- node.js - 为什么“fs”模块上的截断函数只适用于整数