我正在创建一个Spring应用程序,该应用程序在其中调用AWS API中的信息,并将其转换为JSON,以便前端应用程序进行摘要和显示。我目前正在尝试返回帐户中所有当前S3存储桶中的列表,但遇到了JSON响应为的问题:
状态”:500,“错误”:“内部服务器错误”,“消息”:“类型定义错误:[简单类型,类software.amazon.awssdk.services.s3.model.Bucket];嵌套的异常是com.fasterxml.jackson.databind.exc.InvalidDefinitionException:没有为类software.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类型。此类具有代表性的获取器和设置器,并与这些变量关联。
我也尝试将其添加到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;
}
}
感谢您对为什么此功能不起作用的任何想法。
问题出在Bucket类上。Jackson
默认情况下,将所有提供的对象都视为POJO
-s。每个POJO
都应具有getters
/的列表setters
。如果类没有它们,则对象被视为空。如果要序列化此类,则可以:
POJO
类,getters
并将其从原始AWS
类映射到this POJO
。AWS
模型转换为Map
-s和List
-s并进行序列化。也可以看看:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句