我在示例中看到如何将消息字符串传递给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);
答案 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...'
}