【发布时间】:2019-11-01 09:14:56
【问题描述】:
我正在创建一个 Spring 应用程序,其中调用来自 AWS API 的信息并将其转换为 JSON 以供前端应用程序消化和显示。我目前正在尝试返回一个帐户中所有当前 S3 存储桶的列表,但遇到了 JSON 响应为的问题:
状态“:500, "error": "内部服务器错误", "message": "类型定义错误:[简单类型,类 software.amazon.awssdk.services.s3.model.Bucket];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类软件的序列化程序.amazon.awssdk.services.s3.model.Bucket 并且没有发现用于创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过参考链:com.landsend.clouddashboard.data.Class.S3[\"bucketList\ "]-java.util.Collections$UnmodifiableRandomAccessList[0])", “路径”:“/api/s3/buckets”
我创建了一个名为 S3 的类,它具有私有变量。其中之一是名为 bucketList 的 List 类型。此类具有代表性的 getter 和 setter 以及与这些变量相关联。
我也尝试将其添加到 applications.properties 文件中:
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
这确实导致错误消失,但我最终得到了一个空的 JSON 文件。
控制器类
@RestController
@RequestMapping(value="/api")
public class S3Controller {
@Autowired
private S3Service s3Service;
@RequestMapping(method= RequestMethod.GET, value="/s3/buckets")
public S3 ListBuckets(){
return s3Service.listBucket();
}
}
服务类
@Service
public class S3Service {
private S3Access s3Access;
@Autowired
public S3Service(S3Access s3Access){
this.s3Access = s3Access;
}
public S3 listBucket(){
//Any Additional business logic would go here
return s3Access.listBucket();
}
}
访问类
@Repository
public class S3Access implements S3Repository {
@Autowired
private S3 s3Instance;
private Region region = Region.US_EAST_1;
private S3Client s3Client =
S3Client.builder().region(region).build();
@Override
public S3 listBucket() {
ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder().build();
ListBucketsResponse listBucketsResponse = s3Client.listBuckets(listBucketsRequest);
s3Instance.setBucketList(listBucketsResponse.buckets());
return s3Instance;
}
}
S3 构造函数类
@Component
public class S3 {
private String fileName;
private String bucketName;
private int bucketSize;
private List<Bucket> bucketList;
public List<Bucket> getBucketList() {
return bucketList;
}
public void setBucketList(List<Bucket> bucketList) {
this.bucketList = bucketList;
}
}
感谢任何关于为什么这不起作用的想法。
【问题讨论】:
标签: java json spring-boot jackson aws-sdk