首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure + SpringBoot‘com/SpringBoot/jackson/core/JsonFactory’

Azure + SpringBoot‘com/SpringBoot/jackson/core/JsonFactory’
EN

Stack Overflow用户
提问于 2021-08-03 01:49:09
回答 2查看 434关注 0票数 0

我开始学习Java + SprintBoot + AzureStorage。我刚刚使用以下配置通过Spring初始化程序创建了一个项目:

我正在尝试创建一个简单的rest方法来返回Azure的共享列表,但是我得到了以下错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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之间的库版本冲突有关,但是我应该保留哪一个,以及如何保存。

你以前可能遇到过这个问题,任何暗示/建议都是受欢迎的。

提前谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-10 22:16:53

我终于找到了这个问题的根本原因:

我忘记提到的一件重要的事情是,我正在使用JBoss来部署应用程序,问题就在这里,因为JBoss包含了模块。因此,我只需要添加一个文件。

jboss-deployment-estructure.xml

代码语言:javascript
复制
<?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有效。

票数 0
EN

Stack Overflow用户

发布于 2021-08-10 12:06:56

如果您使用的是springboot,则默认添加jackson,

因此,您手动添加的jackson版本可能与spring启动添加的版本相冲突,

尝试从pom.xml中删除杰克逊依赖项。

如果您需要覆盖春季引导默认添加的版本,那么您需要首先排除它,然后添加您自己的依赖项。

代码语言:javascript
复制
<dependency> 
        <groupId>com.fasterxml.jackson.core</groupId> 
        <artifactId>jackson-core</artifactId> 
        <version>2.12.1</version> 
 </dependency> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68629485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档