Spring WebFlux,我如何调试我的WebClient POST交换?
我无法理解我在构建WebClient请求时做错了什么。我想了解实际的HTTP请求是什么样子的。(例如,将原始请求转储到控制台)
POST /rest/json/send HTTP/1.1
Host: emailapi.dynect.net
Cache-Control: no-cache
Postman-Token: 93e70432-2566-7627-6e08-e2bcf8d1ffcd
Content-Type: application/x-www-form-urlencoded
apikey=ABC123XYZ&from=example%40example.com&to=customer1%40domain.com&to=customer2%40domain.com&to=customer3%40domain.com&subject=New+Sale+Coming+Friday&bodytext=You+will+love+this+sale.
我正在使用Spring5的反应式工具来构建一个API。我有一个实用程序类,它将使用Dyn的电子邮件api发送电子邮件。我想使用新的WebClient类来完成这个(org.springframework.web.reactive.function.client.WebClient)
以下命令取自 :https://help.dyn.com/email-rest-methods-api/sending-api/#postsend
curl --request POST "https://emailapi.dynect.net/rest/json/send" --data "apikey=ABC123XYZ&from=example@example.com&to=customer1@domain.com&to=customer2@domain.com&to=customer3@domain.com&subject=New Sale Coming Friday&bodytext=You will love this sale."
当我使用实际值在curl中进行调用时,电子邮件发送正确,因此我觉得我错误地生成了请求。
我的发送命令
public Mono<String> send( DynEmailOptions options )
{
WebClient webClient = WebClient.create();
HttpHeaders headers = new HttpHeaders();
// this line causes unsupported content type exception :(
// headers.setContentType( MediaType.APPLICATION_FORM_URLENCODED );
Mono<String> result = webClient.post()
.uri( "https://emailapi.dynect.net/rest/json/send" )
.headers( headers )
.accept( MediaType.APPLICATION_JSON )
.body( BodyInserters.fromObject( options ) )
.exchange()
.flatMap( clientResponse -> clientResponse.bodyToMono( String.class ) );
return result;
}
我的 DynEmailOptions 类
import java.util.Collections;
import java.util.Set;
public class DynEmailOptions
{
public String getApikey()
{
return apiKey_;
}
public Set<String> getTo()
{
return Collections.unmodifiableSet( to_ );
}
public String getFrom()
{
return from_;
}
public String getSubject()
{
return subject_;
}
public String getBodytext()
{
return bodytext_;
}
protected DynEmailOptions(
String apiKey,
Set<String> to,
String from,
String subject,
String bodytext
)
{
apiKey_ = apiKey;
to_ = to;
from_ = from;
subject_ = subject;
bodytext_ = bodytext;
}
private Set<String> to_;
private String from_;
private String subject_;
private String bodytext_;
private String apiKey_;
}