summerNight
summerNight

Reputation: 1496

How to check for 200 OK response status using Scala and Play Framework

I have a following Actor class that is responsible for sending a JSON message to a URL using POST.

import play.api.libs.ws._

class Worker extends Actor {
  val logger: Logger = Logger("superman")
  val supermanURL = "http://localhost:9000/superman/send"

  def receive = {

    case message: JsValue => {
      val transactionID = (message \ "transactionID").get
      println("Received JSON Object =>" + message)
      val responseFromSuperman = WS.url(supermanURL).withHeaders("Content-Type" -> "application/json").post(message)

      responseFromSuperman.map(
        result => {

          //TODO: Make sure to only log if response status is 200 OK

          logger.info("""Message="ACK received from Superman" for transactionID=""" + transactionID)}
      ).recover { case error: Throwable =>
        logger.error("""Message="NACK received from Superman" for transactionID=""" + transactionID) + " errorMessage:" + error.getLocalizedMessage()
      }
    }

  }

}

So, if you look into my TODO above, I would like to add a check for a response type 200 OK. The current implementation is not doing that and it logs the message even if I manually send in a BadRequest. I tried checking for result.allHeaders which returns:

Map(Date -> Buffer(Wed, 27 Jan 2016 21:45:31 GMT), Content-Type -> Buffer(text/plain; charset=utf-8), Content-Length -> Buffer(7))

but no information about response status 200 OK

Upvotes: 0

Views: 3671

Answers (2)

Jean Logeart
Jean Logeart

Reputation: 53839

Simply:

import play.api.http.Status

if(result.status == Status.OK) {
  // ...
}

Upvotes: 3

Tomer
Tomer

Reputation: 2448

Maybe I am missing here something but you have "status" on the response. So you can do:

WS.url(url).withHeaders("Content-Type" -> "application/json").post(message).map{
    case response if ( response.status == OK) => //DO SOMETHING?
}

Upvotes: 0

Related Questions