GSON-сериализация SNSEvent, приводящая к строчным полям, которые лямбда ожидает прописные слова - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть лямбда-функция, которая принимает SNSEvent (http://javadox.com/com.amazonaws/aws-lambda-java-events/1.1.0/com/amazonaws/services/lambda/runtime/events/SNSEvent.html) в качестве входных данных, а затем работает над этим. Для написания некоторых интеграционных тестовых примеров я хотел вызвать эту лямбда с SNSEvent, сериализованным с использованием lambda.invokeв котором сообщение будет строкой.

Итак, для этого я делал GSON.toJson ([объект типа SNSEvent]), и из этого я получал строку. Но проблема в том, что когда яЯ использую эту строку, чтобы вызвать лямбду, я получаю исключение, что десериализация этой строки завершается неудачей.

Например, GSON.toJson десериализуется до:

{
  "records": [
    {
      "eventSource": "aws:sns",
      "eventVersion": "1.0",
      "eventSubscriptionArn": "arn:aws:sns:us-west-2:{{{accountId}}}:ExampleTopic",
      "sns": {
        "type": "Notification",
        "messageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
        "topicArn": "arn:aws:sns:us-west-2:{{accountId}}:ExampleTopic",
        "subject": "example subject",
        "message": "example message",
        "timestamp": "1970-01-01T00:00:00.000Z",
        "signatureVersion": "1",
        "signature": "EXAMPLE",
        "signingCertUrl": "EXAMPLE",
        "unsubscribeUrl": "EXAMPLE",
        "messageAttributes": {
          "test": {
            "type": "String",
            "value": "TestString"
          },
          "testBinary": {
            "type": "Binary",
            "value": "TestBinary"
          }
        }
      }
    }
  ]
}

в то время как фактическая, он хочет (заглавными буквами):

{
  "Records": [
    {
      "EventSource": "aws:sns",
      "EventVersion": "1.0",
      "EventSubscriptionArn": "arn:aws:sns:us-west-2:{{{accountId}}}:ExampleTopic",
      "Sns": {
        "Type": "Notification",
        "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
        "TopicArn": "arn:aws:sns:us-west-2:{{accountId}}:ExampleTopic",
        "Subject": "example subject",
        "Message": "example message",
        "Timestamp": "1970-01-01T00:00:00.000Z",
        "SignatureVersion": "1",
        "Signature": "EXAMPLE",
        "SigningCertUrl": "EXAMPLE",
        "UnsubscribeUrl": "EXAMPLE",
        "MessageAttributes": {
          "Test": {
            "Type": "String",
            "Value": "TestString"
          },
          "TestBinary": {
            "Type": "Binary",
            "Value": "TestBinary"
          }
        }
      }
    }
  ]
}

Любая идея, почему это так? И как я могу это исправить? Должен ли я использовать какой-то другой объект вместо SNSEvent при вызове лямбды.

...