Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the body of post request in Scalatra?

Tags:

scala

scalatra

I have a scalatra servlet:

post("/asdf") {
  ???
}

And my clients send xml in post body, so I need to extract raw text from request. How do I do it in scalatra?

like image 624
Rogach Avatar asked Mar 28 '12 16:03

Rogach


2 Answers

request.body

gives you access to the request body. So if it is XML and you want it as a NodeSeq, do:

XML.loadString(request.body)
like image 114
Janx Avatar answered Sep 28 '22 03:09

Janx


+1, good question

You have access to Servlet Request via "request" keyword within a Scalatra route, so getInputStream and getContentLength provide access if the post body itself is the xml string; i.e. client is not passing xml stored in named field as part of a form post. If the latter, then the below should do the trick:

post("/foo" && request.getHeader("Accept-Encoding") contains "application/xml") {
  val xml = XML.fromString(params("xml-param-field-name"))
}

If you want to use above parse from string, see Anti-XML Integration in the Scalatra Book

like image 32
virtualeyes Avatar answered Sep 28 '22 04:09

virtualeyes