spring - 不能在 Spring AWS 示例上强制转换为 org.springframework.core.io.WritableResource

标签 spring amazon-web-services amazon-s3

我正在阅读这份文档:

http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html

在 Spring 应用程序中使用 AWS。我对 S3 特别感兴趣,因此,我设置了应用程序并复制了这段代码以确保设置正常工作:

Resource resource = this.resourceLoader.getResource("s3://myBucket/rootFile.log");
WritableResource writableResource = (WritableResource) resource;
try (OutputStream outputStream = writableResource.getOutputStream()) {
  outputStream.write("test".getBytes());
}

但是当我运行它时,我得到了这个错误:
java.lang.ClassCastException: org.springframework.web.context.support.ServletContextResource cannot be cast to org.springframework.core.io.WritableResource

有什么想法有什么问题吗?这是设置问题吗?它看起来不像我,但我对此很陌生。

最佳答案

我不得不删除

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

来自我的依赖。

当包含 devtools 时,在 GenericApplicationContext.getResources() 方法中它执行 if block ,但没有 devtools 它调用 super.getResource():
public Resource getResource(String location) {
    if (this.resourceLoader != null) {
        return this.resourceLoader.getResource(location);
    }
    return super.getResource(location);
}

这将使用 s3 协议(protocol)处理程序并为您提供实现 WritableResource 的不同类型的资源。

关于spring - 不能在 Spring AWS 示例上强制转换为 org.springframework.core.io.WritableResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47135265/

相关文章:

java - 将嵌套对象发送到 Spring POST

java - 无法找到 Spring Boot javabean

amazon-s3 - 如何知道对象是否已完全上传到亚马逊s3?

amazon-s3 - 是否可以使用单个域的多个存储桶为 s3 设置 DNS?

java - 默认 Spring Autowiring

java - 运行集成测试时,Maven 不会初始化 spring 上下文属性

amazon-web-services - 从 AWS Beanstalk 访问 AWS Elasticsearch

java - 本地运行的 DynamoDb 的默认预配置吞吐量(读取和写入容量单位)是多少?

javascript - AWS s3重定向到另一个s3存储桶

python - AWS BOTO3 S3 python - 调用 HeadObject 操作 : Not Found 时发生错误 (404)