1

Mailgun API のラッパーを作成するために、jackson で netflix-feign を使用しています。問題は、API が POST 要求を使用する必要があることです。"Content-Type: application/x-www-form-urlencoded"

これはサンプルコードです:

@RequestLine("POST /messages")
@Headers("Content-Type: application/x-www-form-urlencoded")
ResponseMessage sendMessage(Message message);

Messageオブジェクトには必要なプロパティが含まれており、JSON アノテーションがあります 。@JsonProperty(value = "from") private String from;

問題は、送信されるオブジェクトが JSON オブジェクトであることです。

{ "from" : "test@test.mailgun.org", "to" : "atestaccount@gmail.com", "subject" : "A test email", "text" : "Hello this is the text of a test email.", "html" : "<html><body><h1>Hello this is the html of a test email.</h1></body></html>" }

ただし、これは有効なx-www-form-urlencodedコンテンツ タイプではありません。

オブジェクトを正しいコンテンツ タイプに自動的にシリアル化する方法はありますか?

@Bodyアノテーションを使用できると思いますが、それを使用するには、さまざまなプロパティをsendMessageメソッドに渡す必要があります。

4

1 に答える 1

0

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、 andを使用できJaxBDecoderます。

api = Feign.builder()
              .encoder(new JAXBEncoder())
              .decoder(new JAXBDecoder())
              .target(Api.class, "https://apihost");
于 2016-10-28T09:40:45.307 に答える