这是非常基本的。根据我的阅读,这应该可以工作。我也有一个更复杂的版本。
下面列出的To参数是一个字符串列表。 From和Body是字符串。
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://api.testdomain.com/batchemail');
request.setHeader('Authorization', 'Bearer ' + token);
request.setMethod('POST');
request.setHeader('Accept', '*/*');
request.setHeader('Content-Type', 'application/json;charset=UTF-8');
// Set the body as a JSON object
request.setBody('{"To": ["to@email.com"]}');
request.setBody('{"From": "from@email.com"}');
request.setBody('{"Body": "Test message"}');
HttpResponse response = http.send(request);
这是API接受的JSON的示例。
{
"to": ["to@email.com"],
"from": "from@email.com",
"body": "Test message"
}
该终结点已添加到“远程站点设置”中。
有人知道为什么这行不通吗?任何帮助深表感谢。谢谢!
更新1 (有效)
request.setBody('{"To": ["to@email.com"], "From": "from@email.com", "Body": "Test message." }');
更新2 (这也可行)
JSONGenerator gen = JSON.createGenerator(true);
// Write data to the JSON string.
gen.writeStartObject();
gen.writeObjectField('to', emailList);
gen.writeStringField('from', 'from@email.com');
gen.writeStringField('body', message);
gen.writeEndObject();
// Get the JSON string.
String pretty = gen.getAsString();
request.setBody(pretty);
更新3 (这也有效)
Gareth Jordan的解决方案也可以工作。
答案 0 :(得分:1)
在第一部分中,一次调用setBody
,您对setBody
的3次调用只是相互覆盖。
对于json生成器部分,您进行了双重编码,变量pretty
包含有效生成的json,无需调用json.serialize
。
答案 1 :(得分:1)
为什么不只是为您的身体创建一个简单的类(或内部类)并使用JSON.serialize(payload)。它使它更干净更清晰。
class Payload{
String[] to;
String sender;
String body;
public Payload(String[] recipients, String sender, String message){
this.to = recipients;
this.sender = sender;
this.body = message;
}
}
那么您的代码就是
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://api.testdomain.com/batchemail');
request.setHeader('Authorization', 'Bearer ' + token);
request.setMethod('POST');
request.setHeader('Accept', '*/*');
request.setHeader('Content-Type', 'application/json;charset=UTF-8');
Payload body = new Payload(emailList, 'from@email.com','Test Message');
request.setBody(JSON.serialize(body).replace('"sender"','"from"'));
HttpResponse response = http.send(request);