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...
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)
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With