我正在创建一个Spring应用程序,其中从AWS API调用信息,并将其转换为JSON,以便前端应用程序进行消化和显示。我目前正试图返回一个帐户上所有当前S3 bucket的列表,但遇到了一个问题,JSON响应如下:
“status”:500,“error”:“内部服务器错误”,“message”:“类型定义错误:[简单类型,类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
我创建了一个名为S3的类,它具有私有变量。其中一个是名为BucketList的列表类型。该类具有与这些变量相关联的代表性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;
}
}
任何关于为什么这不起作用的想法都很感激。
问题在于Bucket类。Jackson
默认情况下会像POJO
-s一样处理所有提供的对象。每个POJO
应该有getter
/setter
的列表。如果类没有,则对象被视为空。如果要像这样序列化类,可以:
getters
创建额外的POJO
类,并将其从原始AWS
类映射到此POJO
.AWS
模型手动转换为map
-s和list
-s,并将它们序列化。另见:
当我试图导航到一个endpoint时,我得到以下错误 类型定义错误:[简单类型,类org.hibernate.proxy.pojo.ByteBuddy.ByteBuddyInterceptor];嵌套异常为com.fasterxml.jackson.databind.exc.InvalidDefinitionException:未找到类org.hibernate.proxy.pojo.ByteBu
下面的代码再现了这个问题: 上面的代码不做其他注册“自定义”序列化程序的事情(只是委托回原始序列化程序),但它生成的JSON没有null属性: {“第一个”:“鲍勃”,“最后一个”:“巴克”} 我读过许多看似相关的SO文章,但没有一篇能让我找到解决方案。我尝试在序列化时显式地将映射器设置为,但没有成功。 我唯一的线索是JavaDoc for JsonSerializer中的一条注释: 注意:永远不
我有以下ORM对象(简化): 每行有: 主键 插入行时的时间戳 computed_values要存储的实际JSONB数据 JSONB来存储计算数据的日期列表。 虽然我对列没有问题,但是对象不能被SQLAlchemy JSON序列化程序序列化。 我的想法是为该列重新定义对象的序列化程序行为。要做到这一点,我必须定义自己的自定义JSON序列化程序,或者使用一些现成的序列化程序,比如orjson。因为我
com.fasterxml.jackson.databind.jsonMappingException:未发现用于java.io.BufferedReader类的序列化程序,也未发现用于创建BeanSerializer的属性(为了避免异常,禁用SerializationFeature.fail_on_empty_beans)(通过引用链:pj.core.bean.actionResult[“dat
我有一个不能用Gson正确序列化的类(类只是name和HashMap),所以我编写了一个自定义序列化程序来从HashMap中打印名称和键值对。 此外,这是实际打印的内容,序列化整个对象并不像我所期望的那样工作,也不只是直接打印对象。 任何帮助都将不胜感激。
我在一个Kafka消息中使用了我自己的类,它有一堆字符串数据类型。 我想我需要编写自己的序列化器并将其提供给生产者属性?
我想创建一个自定义序列化程序,它只做一点点工作,然后将其余部分留给默认序列化。 例如: 通过为聚合对象创建其他自定义序列化器的想法,这些对象根据“特殊”属性值表现不同。然而,上面的代码不起作用,因为它毫不奇怪地进入了无限递归。 一旦我设置了属性,有没有办法告诉jackson使用默认序列化?我真的不想像许多自定义序列化程序那样枚举所有属性,因为该类相当复杂,并且我不想每次更改该类时都必须对序列化程序