Azure + SpringBoot 'com/fasterxml/jackson/core/JsonFactory'
Posted
技术标签:
【中文标题】Azure + SpringBoot \'com/fasterxml/jackson/core/JsonFactory\'【英文标题】:Azure + SpringBoot 'com/fasterxml/jackson/core/JsonFactory'Azure + SpringBoot 'com/fasterxml/jackson/core/JsonFactory' 【发布时间】:2021-10-08 06:33:01 【问题描述】:我开始使用 Java + SprintBoot + AzureStorage。我刚刚使用以下配置通过 Spring 初始化程序创建了一个项目:
我正在尝试创建一个简单的 rest 方法来从 Azure 返回共享列表,但出现以下错误:
Exception Details:
Location:
com/fasterxml/jackson/databind/cfg/MapperBuilder.streamFactory()Lcom/fasterxml/jackson/core/TokenStreamFactory; @7: areturn
Reason:
Type 'com/fasterxml/jackson/core/JsonFactory' (current frame, stack[0]) is not assignable to 'com/fasterxml/jackson/core/TokenStreamFactory' (from method signature)
Current Frame:
bci: @7
flags:
locals: 'com/fasterxml/jackson/databind/cfg/MapperBuilder'
stack: 'com/fasterxml/jackson/core/JsonFactory'
据我所知,我的代码中没有什么特别的地方可以分享:
AzureStoreService
@Service
public class AzureStorageService
@Value("$azure.storage.accountName")
private String accountName;
@Value("$azure.storage.accountKey")
private String token;
private ShareServiceClient createServiceClient()
String shareURL = String.format("https://%s.file.core.windows.net", accountName);
return new ShareServiceClientBuilder().endpoint(shareURL).sasToken(token).buildClient();
public List<String> listShares()
List<String> shares = new ArrayList<>(0);
ShareServiceClient client = createServiceClient();
client.listShares().forEach(item -> shares.add(item.getName()));
return shares;
AzureController
@RestController
@RequestMapping("/storage")
public class AzureController
@Autowired
private AzureStorageService azureStorageService;
@GetMapping("/list-shares")
private ResponseEntity<List<String>> listShares()
List<String> shares = azureStorageService.listShares();
return new ResponseEntity<>(shares, HttpStatus.OK);
我猜这个问题与 Spring Boot 和 Azure 之间的库版本冲突有关,但是我应该保留哪个以及如何保留。
您之前可能遇到过这个问题,欢迎任何提示/建议。
提前非常感谢!
【问题讨论】:
【参考方案1】:如果你使用的是springboot,那么默认会添加jackson,
所以你手动添加的jackson版本可能与spring boot添加的版本冲突,
尝试从 pom.xml 中删除 jackson 依赖项。
如果你需要覆盖spring boot默认添加的版本,那么你需要先排除它,然后添加你自己的依赖。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.1</version>
</dependency>
【讨论】:
【参考方案2】:我终于找到了这个问题的根本原因:
我忘记提到的一件重要的事情是我正在使用 JBoss 来部署应用程序,而问题出在这,因为 JBoss 包含的模块。所以我只需要添加一个部署结构文件。
jboss-deployment-estructure.xml:
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
<deployment>
<module-alias name="deployment.AzureTestWS"/>
<exclusions>
<module name="com.fasterxml.jackson.core.jackson-core"/>
<module name="com.fasterxml.jackson.core.jackson-databind"/>
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider"/>
<module name="org.jboss.resteasy.resteasy-jackson2-provider"/>
<module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310"/>
<module name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8" />
</exclusions>
</deployment>
</jboss-deployment-structure>
这适用于 JBoss EAP 7.2 上的 mi
【讨论】:
以上是关于Azure + SpringBoot 'com/fasterxml/jackson/core/JsonFactory'的主要内容,如果未能解决你的问题,请参考以下文章
JWT 令牌的签名无效 - Azure + Spring Boot
Spring Boot - 无法连接 Azure MySQL 数据库
在 Azure 应用服务中具有信任库的 Spring Boot 容器