kaffein
kaffein

Reputation: 1766

How to http post with an empty body request using WS API in Playframework 2 / Scala?

I try to send an HTTP POST request to a service endpoint using Play2/Scala WS API. Since there is no parameters to be sent in the HTTP POST body, how can I send it using

WS.url("http://service/endpoint").post()

I have tried post() without argument but it gave me an error.

Cannot write an instance of Unit to HTTP response. Try to define a Writeable[Unit]

Can you please help on this ?

thanks in advance...

Upvotes: 21

Views: 6896

Answers (3)

Thomas Pocreau
Thomas Pocreau

Reputation: 470

For Play 2.6 and after, you have to use play.api.libs.ws.EmptyBody.

import play.api.libs.ws.{EmptyBody, WSClient}
WS.url("http://service/endpoint").post(EmptyBody)

Typical error is:

Cannot find an instance of play.api.mvc.Results.EmptyContent to WSBody. Define a BodyWritable[play.api.mvc.Results.EmptyContent] or extend play.api.libs.ws.ahc.DefaultBodyWritables

Upvotes: 31

Rich
Rich

Reputation: 15457

As of Play 2.8, you cannot use the WSRequest.post(body) methods with an empty body, because the BodyWritable trait requires a non-empty Content-Type

Instead, you can do ws.url(u).execute("POST") to send an HTTP POST request with no body.

Upvotes: 2

Martin Ring
Martin Ring

Reputation: 5426

Since post awaits a value that implements the Writeable and ContentTypeOf type classes, you can use the Results.EmptyContent from play.api.mvc. (See API)

So I guess

WS.url("http://service/endpoint").post(Results.EmptyContent())

should do. (Didnt test)

Upvotes: 31

Related Questions