Java 将对象序列化为x-www-form-url,并使用Feign和Jackson编码

Java 将对象序列化为x-www-form-url,并使用Feign和Jackson编码,java,post,jackson,netflix-feign,Java,Post,Jackson,Netflix Feign,我正在使用netflix与jackson一起创建Mailgun API的包装。 问题在于,API要求POST请求使用“内容类型:application/x-www-form-urlencoded” 这是一个示例代码: @RequestLine("POST /messages") @Headers("Content-Type: application/x-www-form-urlencoded") ResponseMessage sendMessage(Message message); 消息对

我正在使用netflix与jackson一起创建Mailgun API的包装。 问题在于,API要求POST请求使用
“内容类型:application/x-www-form-urlencoded”

这是一个示例代码:

@RequestLine("POST /messages")
@Headers("Content-Type: application/x-www-form-urlencoded")
ResponseMessage sendMessage(Message message);
消息
对象包含必要的属性,并且具有JSON注释:
@JsonProperty(value=“from”)
来自的私有字符串

问题是发送的对象是JSON对象:

{
“发件人”:test@test.mailgun.org",
“至”:atestaccount@gmail.com",
“主题”:“测试电子邮件”,
“文本”:“您好,这是一封测试电子邮件的文本。”,
“html”:“您好,这是测试电子邮件的html。”
}

但是,这不是有效的
x-www-form-urlencoded
内容类型

有没有办法将对象自动序列化为正确的内容类型

我认为我可以使用
@Body
注释,但为了使用它,我必须将不同的属性传递给
sendmages
方法。

传递一个映射了xml内容的字符串 只需在方法中发送一个字符串即可,该字符串以前已解析为xml:

@RequestLine("POST /messages")
@Headers("Content-Type: application/x-www-form-urlencoded")
ResponseMessage sendMessage(String message);
然后使用映射器(例如Jackson),您可以将消息映射到xml:

ObjectMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(message);
然后使用以下xml调用该方法:

sendMessage(xml);
使用编码器 否则,我认为可以根据需要配置编码器和解码器。在本例中,要使用XML,可以使用
JaxBEncoder
JaxBDecoder

api = Feign.builder()
              .encoder(new JAXBEncoder())
              .decoder(new JAXBDecoder())
              .target(Api.class, "https://apihost");
传递映射了xml内容的字符串 只需在方法中发送一个字符串即可,该字符串以前已解析为xml:

@RequestLine("POST /messages")
@Headers("Content-Type: application/x-www-form-urlencoded")
ResponseMessage sendMessage(String message);
然后使用映射器(例如Jackson),您可以将消息映射到xml:

ObjectMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(message);
然后使用以下xml调用该方法:

sendMessage(xml);
使用编码器 否则,我认为可以根据需要配置编码器和解码器。在本例中,要使用XML,可以使用
JaxBEncoder
JaxBDecoder

api = Feign.builder()
              .encoder(new JAXBEncoder())
              .decoder(new JAXBDecoder())
              .target(Api.class, "https://apihost");