如何将对象传递给亚马逊SNS

时间:2015-07-14 21:44:06

标签: amazon-web-services amazon-sns

我在示例中看到如何将消息字符串传递给amazon sns sdk的发布方法。但是,是否存在如何将自定义对象作为消息传递的例子?我尝试设置" MessageStructure"到" json"但后来我得到InvalidParameter: Invalid parameter: Message Structure - No default entry in JSON message body错误。我应该在哪里将对象值传递到参数中?

任何例子?

    var params = {
        Message: JSON.stringify(item),
        MessageStructure: 'json',
        TopicArn: topic
        //MessageAttributes: item
    };

    return sns.publishAsync(params);

3 个答案:

答案 0 :(得分:1)

Jackson 2非常支持将对象转换为JSON String,反之亦然。

  

To String

Cat c = new Cat();
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(c);
  

对象

Cat obj = mapper.readValue(s,Cat.class);

答案 1 :(得分:0)

消息必须是JSON对象,并且需要添加default属性,并且应包含要包含在电子邮件中的JSON。

    var defaultMessage = { "default": item };

    var params = {
        Message: defaultMessage, /*JSON.stringify(item),*/
       ---------^
        MessageStructure: 'json',
        TopicArn: topic
        //MessageAttributes: item
    };

    return sns.publishAsync(params);

使用python

boto3.client("sns").publish(
        TopicArn=sns_subscription_arn,
        Subject="subject",
        Message=json.dumps({"default": item}),
                    --------^
        MessageStructure="json",
    )

仅供参考,如果您在AWS控制台中转到此SNS主题,则可以“发布消息”并选择“每个传递协议的自定义有效负载”。在这里,您将看到电子邮件的模板,并且“默认”属性被标记为“样本后备消息”。

答案 2 :(得分:0)

一个例子如下所示:https://docs.aws.amazon.com/sns/latest/api/API_Publish.html#API_Publish_Example_2

<块引用>

,用于信息的JSON格式如下:

{
    "default": "A message.",
    "email": "A message for email.",
    "email-json": "A message for email (JSON).",
    "http": "A message for HTTP.",
    "https": "A message for HTTPS.",
    "sqs": "A message for Amazon SQS." 
} 

因此,假设你想传递的是一个对象,它为我工作的方式是:

const messageObjToSend = {
    ...
}

const params = {
    Message: JSON.stringify({
        default: JSON.stringify( messageObjToSend )
    }),
    MessageStructure: 'json',
    TopicArn: 'arn:aws:sns...'
}