15

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?

Rogach
  • 26,050
  • 21
  • 93
  • 172

2 Answers2

20
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)
Janx
  • 3,285
  • 3
  • 19
  • 24
  • Make sure that Content-Type is not 'application/x-www-form-urlencoded' (see Ross' answer on https://groups.google.com/forum/#!topic/scalatra-user/lApjIJXiNqg) – uthomas Nov 03 '13 at 02:09
5

+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

virtualeyes
  • 11,147
  • 6
  • 56
  • 91