Как получить тело почтового запроса в Scalaтре?

У меня есть сервлет scalatra:

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

И мои клиенты отправляют xml в тело сообщения, поэтому мне нужно извлечь исходный текст из запроса. Как это сделать в скаляре?

Ответы

Ответ 1

request.body

предоставляет вам доступ к телу запроса. Итак, если это XML и вы хотите, чтобы он был как NodeSeq, выполните:

XML.loadString(request.body)

Ответ 2

+1, хороший вопрос

У вас есть доступ к запросу Servlet с помощью ключевого слова "запрос" в маршруте Scalatra, поэтому getInputStream и getContentLength предоставляют доступ, если само тело сообщения является строкой xml; то есть клиент не передает xml, хранящийся в именованном поле, как часть сообщения формы. Если последнее, то нижеследующее должно сделать трюк:

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

Если вы хотите использовать описанный выше синтаксический анализ из строки, см. раздел "Интеграция с XML-интерфейсом" в Scalaтра-книга