Java 将对象序列化为x-www-form-url,并使用Feign和Jackson编码
我正在使用netflix与jackson一起创建Mailgun API的包装。 问题在于,API要求POST请求使用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); 消息对
“内容类型: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");