Spring Boot WAR包部署WildFly 8失败,报halObjectMapper Bean创建异常
halObjectMapper Bean创建异常 这个问题大概率是Spring Boot依赖的Jackson版本和WildFly 8内置的Jackson版本冲突导致的——WildFly 8自带的Jackson 2.3.x版本缺少Spring Data REST的halObjectMapper所需的部分特性,从而触发Bean创建失败。
下面是具体的解决步骤:
1. 确保你的Spring Boot应用是标准的WAR打包结构
首先确认你的项目中已经包含SpringBootServletInitializer的子类,这是Spring Boot应用部署到传统Servlet容器的必要配置:
public class YourAppServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(YourApplication.class); } }
2. 调整Maven依赖,解决Jackson版本冲突
在你的pom.xml中,需要将Spring Boot的Jackson相关依赖标记为provided,让WildFly使用自身内置的Jackson版本,同时确保Spring Data REST能兼容这个版本:
<!-- 排除Spring Boot Starter中的Jackson依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加匹配WildFly版本的Jackson依赖并标记为provided --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency>
3. 配置WildFly模块,避免类加载隔离问题
如果上面的步骤还没解决问题,你需要让WildFly将Jackson模块暴露给你的应用:
在WAR包的WEB-INF目录下创建jboss-deployment-structure.xml,内容如下:
<jboss-deployment-structure> <deployment> <dependencies> <module name="com.fasterxml.jackson.core.jackson-core" export="true"/> <module name="com.fasterxml.jackson.core.jackson-databind" export="true"/> <module name="com.fasterxml.jackson.core.jackson-annotations" export="true"/> </dependencies> </deployment> </jboss-deployment-structure>
这个文件会告诉WildFly不要隔离这些Jackson类,让Spring Data REST能正常加载所需的组件。
4. 重新打包部署
执行mvn clean package重新生成WAR包,再部署到WildFly 8,此时halObjectMapper应该能正常创建了。
额外提醒:如果你的Spring Boot版本过高(比如2.x以上),也会和WildFly 8兼容性较差,建议使用Spring Boot 1.5.x系列版本,这是最后一个适配旧Servlet容器的稳定大版本。
内容的提问来源于stack exchange,提问作者Belal Galal

