Как обслуживать XML и JSON с помощью Play! 2.0

Я играюсь с созданием простого приложения, чтобы намочить ноги с помощью Play! 2.0. Я хотел бы иметь возможность обслуживать свои ресурсы в виде XML (на самом деле фида ATOM) и JSON. Я знаю, как это сделать в 1.2.x, но в 2.0 этот способ не работает. Кто-нибудь знает как это делать? Примеры будут высоко оценены.


person geowa4    schedule 03.01.2012    source источник


Ответы (1)


Для JSON я бы рекомендовал вам взглянуть на этот вопрос Как отобразить ответ JSON в Play framework v2.0 (последняя сборка из GIT)

XML намного проще, так как вы можете просто вызвать return результат с помощью кода, подобного этому:

Ok(Xml(xmlString))

Но более чистый способ использования этой функции, вероятно, состоит в том, чтобы написать свой собственный шаблон под views/xml, например, mdo.scala.xml.

@(mdo:MyDomainObject)
<?xml version="1.0" encoding="utf-8"?>
<MyDomainObject>
  <name>@mdo.name</name>
  <desc>@mdo.desc</desc>
  <kws>
  @mdo.keywords map { k=>
    <kw>k</kw>
  }
  </kws>
</MyDomainObject>

Затем в вашем контроллере

def c = Action {
  val o = MyDomainObject("mine", "for example", List("stack", "over", "flow"))
  Ok(views.xml.mdo(o))
}

В противном случае у вас может быть функция toXml, аналогичная toJson, с помощью библиотеки маршалинга.

person Andy Petrella    schedule 03.01.2012
comment
Я поставлю вам галочку, но вот необходимая вещь, которую вам нужно сделать в дополнение к тому, что вы упомянули. Чтобы быть действительным, ваша первая строка должна быть чем-то вроде @(posts: Seq[Post])<?xml version="1.0" encoding="utf-8"?>. Если вы этого не сделаете, ваша первая строка не будет XML-декларацией, как должна. Ошибка? Наверное. - person geowa4; 04.01.2012
comment
НЕТ эта строка обязательна! Я просто забыл упомянуть об этом. Позвольте мне добавить это. На самом деле это часть спецификации XML, эта строка всегда кодируется в UTF-8 и используется синтаксическими анализаторами, чтобы узнать, какая кодировка используется в документе (и версия XML, но на самом деле она не так часто используется. ..) - person Andy Petrella; 04.01.2012
comment
Проблема все еще существует в вашем решении. Первая строка вашего сгенерированного XML фактически пуста. Вам нужно поместить объявление сразу после параметров воспроизведения, чтобы оно отображалось правильно. Это ошибка для меня. - person geowa4; 07.01.2012
comment
Хорошо, вы имеете в виду, что Play! добавляет \n после списка своих параметров ... Мммм, да, это своего рода ошибка, я проверю это и обсужу с ними. Спасибо - person Andy Petrella; 07.01.2012