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

У меня есть сервлет скалятры:

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

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


person Rogach    schedule 28.03.2012    source источник


Ответы (2)


request.body

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

XML.loadString(request.body)
person Janx    schedule 28.03.2012
comment
Убедитесь, что Content-Type - это не application / x-www-form-urlencoded (см. Ответ Росс на groups.google.com/forum / #! topic / scalatra-user / lApjIJXiNqg) - person uthomas; 03.11.2013

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

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

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

Если вы хотите использовать вышеупомянутый синтаксический анализ из строки, см. Интеграцию Anti-XML в Scalatra Book

person virtualeyes    schedule 28.03.2012
comment
я новичок в scala и делаю это ^^ я получаю ошибку компиляции на && / contains. - person gursahib.singh.sahni; 28.04.2017
comment
@ gursahib.singh.sahni не уверен, прошло 5 лет с тех пор, как я использовал Scalatra ;-) Может быть, попробуйте их канал Gitter < / а> - person virtualeyes; 29.04.2017