私はSQSからのイベントによってトリガーされるAWSラムダ関数を開発しようとしています。
私が使用しています春・クラウド機能アダプタAWS(バージョン1.0.0.RELEASE)を、具体的でSpringBootRequestHandler。
しかし、使用されているObjectMapperは、大文字と小文字が区別され、したがって、JSONはSQSからの成功した変換することができません。
SQSは、以下のJSONを公開し、それがあるレコード私はとの問題を抱えていることを特定のフィールド。
{
"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": {}
}
]
}
私はこの問題の提案を試みたが、無駄にしています。春にObjectMapper設定
私のPOJOで、私はまた、注釈の下に追加されましたが、それは外ラムダのだろうしながら、それはどちらか動作していません。
@JsonProperty("Records")
private List<SqsRecord> Records;
すべてのヘルプははるかに高く評価されるだろう。
私のラムダハンドラは次のように定義されています。
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;
}
}
私はサンプルのメッセージからJSONはObjectMapperによってで読み取ることができることを期待していますが、フィールド「レコードは」nullです。
私は、この問題は、より簡単な方法で解決しました。
参照https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-stream.htmlと特定で
ラムダのシリアル化のアプローチは、あなたのニーズを満たしていない場合、あなたはバイトストリーム実装を使用することができます
私は今、直接SpringBootStreamHandlerを使用していると私は私のように春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;
}