設定しObjectmapperは、Java AWSラムダが使用します

スティーブン・ギブソン:

私は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;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=190165&siteId=1