Spring Boot集成AWS S3与SNS遇Unmarshaller错误的解决方法
解决Spring Boot同时集成AWS S3与SNS的版本冲突问题
你的问题核心是AWS SDK各服务版本不统一导致的依赖冲突:S3使用1.12.141版本,SNS使用1.12.319版本,两者版本差距过大,底层核心库(如aws-java-sdk-core)的类方法签名不一致,最终抛出NoSuchMethodError。
以下是直接可行的解决方案:
方案1:用AWS SDK BOM统一管理版本(推荐)
Maven的BOM(物料清单)可以强制所有AWS SDK服务模块使用同一版本,彻底避免版本冲突。在pom.xml中先导入BOM,再添加S3和SNS依赖时无需指定版本:
<dependencyManagement> <dependencies> <!-- AWS SDK BOM,统一所有服务版本 --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.12.319</version> <!-- 选择统一版本,这里沿用SNS的新版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 后续添加S3、SNS依赖,无需写version --> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sns</artifactId> </dependency> </dependencies>
方案2:手动统一两个服务的版本
如果不想使用BOM,直接将S3的版本修改为与SNS一致(反之亦可,选择一个稳定版本即可):
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.12.319</version> <!-- 和SNS版本保持统一 --> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sns</artifactId> <version>1.12.319</version> </dependency>
验证步骤
- 执行
mvn clean install清理并重新构建项目 - 用
mvn dependency:tree命令检查依赖树,确认aws-java-sdk-core仅存在一个版本,无冲突 - 重启Spring Boot应用,重新调用SNS订阅接口测试
内容的提问来源于stack exchange,提问作者abidinberkay
相关产品推荐
相关产品推荐

