我开始学习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和Azure之间的库版本冲突有关,但是我应该保留哪一个,以及如何保存。
你以前可能遇到过这个问题,任何暗示/建议都是受欢迎的。
提前谢谢!
发布于 2021-08-10 22:16:53
我终于找到了这个问题的根本原因:
我忘记提到的一件重要的事情是,我正在使用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有效。
发布于 2021-08-10 12:06:56
如果您使用的是springboot,则默认添加jackson,
因此,您手动添加的jackson版本可能与spring启动添加的版本相冲突,
尝试从pom.xml中删除杰克逊依赖项。
如果您需要覆盖春季引导默认添加的版本,那么您需要首先排除它,然后添加您自己的依赖项。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.1</version>
</dependency> https://stackoverflow.com/questions/68629485
复制相似问题