Java 为具有messageStructure json和指定messageType的消息创建Amazon SNS订阅服务器

Java 为具有messageStructure json和指定messageType的消息创建Amazon SNS订阅服务器,java,amazon-sns,Java,Amazon Sns,我想订阅一个亚马逊SNS主题;我的订户已使用协议“http”注册 发布消息时,messageStructure设置为“json”,消息内容包含“default”、“http”和“https”条目 Amazon成功接收到发布的消息,并向订户发送通知。AWS控制台中的验证确认我的订户已订阅“http”协议。但是,订户接收的是“默认”消息,而不是“http”(json)消息。有什么可能是错误的,为什么Amazon将“默认”通知推送到订阅者而不是“http”通知?您能告诉我们发送的确切字符串吗?我猜您是

我想订阅一个亚马逊SNS主题;我的订户已使用协议“http”注册

发布消息时,messageStructure设置为“json”,消息内容包含“default”、“http”和“https”条目


Amazon成功接收到发布的消息,并向订户发送通知。AWS控制台中的验证确认我的订户已订阅“http”协议。但是,订户接收的是“默认”消息,而不是“http”(json)消息。有什么可能是错误的,为什么Amazon将“默认”通知推送到订阅者而不是“http”通知?

您能告诉我们发送的确切字符串吗?我猜您是在消息中嵌入JSON结构,而实际上您应该只使用字符串

例如,我知道您正在发送以下内容:

{
  "default": "foo",
  "http": {"anotherThing":1},
}
实际上,您需要发送的是:

{
  "default": "foo",
  "http": "{\"anotherThing\":1}",
}
我会尝试将代码更改为:

JSONObject jsonMessage = new JSONObject();
jsonMessage.put(DEFAULT, "foo");
jsonMessage.put(HTTPS, someOtherJsonObject.toString());
jsonMessage.put(HTTP, someOtherJsonObject.toString());

PublishRequest publishRequest = new PublishRequest(topicArn, jsonMessage.toString());
publishRequest.setMessageStructure(MESSAGE_TYPE_JSON);
amazonSNSClient.publish(publishRequest);
{
  "default": "foo",
  "http": "{\"anotherThing\":1}",
}
JSONObject jsonMessage = new JSONObject();
jsonMessage.put(DEFAULT, "foo");
jsonMessage.put(HTTPS, someOtherJsonObject.toString());
jsonMessage.put(HTTP, someOtherJsonObject.toString());

PublishRequest publishRequest = new PublishRequest(topicArn, jsonMessage.toString());
publishRequest.setMessageStructure(MESSAGE_TYPE_JSON);
amazonSNSClient.publish(publishRequest);