Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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...

like image 764
kaffein Avatar asked Mar 06 '13 18:03

kaffein


3 Answers

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)

like image 50
Martin Ring Avatar answered Nov 06 '22 15:11

Martin Ring


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
like image 24
Thomas Pocreau Avatar answered Nov 06 '22 15:11

Thomas Pocreau


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.

like image 2
Rich Avatar answered Nov 06 '22 13:11

Rich