java - 配置 Java AWS Lambda 使用的 Objectmapper
问题描述
我正在尝试开发一个由 SQS 事件触发的 AWS Lambda 函数。
我正在使用spring-cloud-function-adapter-aws(版本 1.0.0.RELEASE),特别是SpringBootRequestHandler。
但是,正在使用的 ObjectMapper 区分大小写,因此无法成功转换来自 SQS 的 Json。
SQS 发布以下 Json,尤其是我遇到问题的Records字段。
{
"Records": [
{
"body": "Hello from SQS!",
"receiptHandle": "MessageReceiptHandle",
"md5OfBody": "7b270e59b47ff90a553787216d55d91d",
"eventSourceARN": "arn:aws:sqs:eu-west-1:123456789012:MyQueue",
"eventSource": "aws:sqs",
"awsRegion": "eu-west-1",
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
"attributes": {
"ApproximateFirstReceiveTimestamp": "1523232000001",
"SenderId": "123456789012",
"ApproximateReceiveCount": "1",
"SentTimestamp": "1523232000000"
},
"messageAttributes": {}
}
]
}
我已经尝试过this question中的建议,但无济于事。在 Spring 中配置 ObjectMapper
在我的 POJO 中,我还添加了以下注释,但它在 Lambda 之外也不起作用。
@JsonProperty("Records")
private List<SqsRecord> Records;
任何帮助将非常感激。
我的 Lambda 处理程序定义为:
public class SqsEventHandler extends SpringBootRequestHandler<SqsEvent, String> {}
POJO定义为:
public class SqsEvent {
@JsonProperty("Records")
private List<SqsRecord> records;
@Data
public class SqsRecord {
private String body;
private String receiptHandle;
private String md5OfBody;
private String eventSourceARN;
private String eventSource;
private String awsRegion;
private String messageId;
}
}
我希望 ObjectMapper 能够读取示例消息中的 Json,但“记录”字段为空。
解决方案
我以更简单的方式解决了这个问题。
参考https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-stream.html和具体
如果 Lambda 的序列化方式不能满足你的需求,可以使用字节流实现
我现在直接使用 SpringBootStreamHandler,并且在我的 Spring Configuration 类中创建了一个 ObjectMapper 实例,其中包含我所需的配置选项:
@Bean
public ObjectMapper objectMapper() {
final ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return mapper;
}
推荐阅读
- python - 如何在 ipython 中修复“DistributionNotFound:'jsonschema' 分布 ...”
- rust - 如何从 Rust 生成完全链接的可执行 LLVM 位码文件?
- ruby-on-rails - 组合两个选择语句的结果而不返回数组的最佳方法?
- algorithm - 模糊图匹配
- jquery - Treemap - HierarchicalDataSource - 模板
- sqlite - 插入/更新许多具有相同时间戳的行
- pipeline - 从另一个管道结果开始运行管道
- atata - Atata - 在 Atata 框架中确定测试的优先级有困难
- apache - 在 apache 共享主机上部署一个用 Nuxtjs 制作的通用 APP
- reactjs - 如何从firebase存储中删除图像反应原生