2012-01-03 25 views
6

Sto giocando con una semplice applicazione per bagnarmi i piedi con Play! 2.0. Mi piacerebbe essere in grado di servire le mie risorse come XML (feed ATOM, davvero) e JSON. So come farlo in 1.2.x, ma in questo modo non sembra funzionare con 2.0. Qualcuno sa come farlo? Gli esempi sarebbero molto apprezzati.Come servire XML e JSON con Play! 2.0

risposta

11

Per JSON ti consiglierei di guardare a questo domanda How to render JSON response in Play framework v2.0 (latest build from GIT)

XML è molto più semplice dal momento che si può chiamare restituire il risultato con codice come questo:

Ok(Xml(xmlString)) 

Ma il modo più pulito, fot utilizzare questa funzionalità è probabilmente quello di scrivere il proprio modello di sotto views/xml come mdo.scala.xml potrebbe essere

@(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> 

Poi nel controller

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

In caso contrario, forse hanno la funzione toxml simile a toJSON con l'aiuto di una libreria di marshalling

+0

io ti do il segno di spunta, ma qui è una cosa necessaria è necessario fare in aggiunta a ciò che hai menzionato. Per essere valido, la prima riga deve essere qualcosa come '@ (post: Seq [Post]) '. Se non lo fai, la tua prima riga non sarà una dichiarazione XML come dovrebbe. Bug? Probabilmente. – geowa4

+0

NO questa linea è obbligatoria! Ho appena dimenticato di dirlo. Lasciami aggiungere. In realtà fa parte delle specifiche XML, questa riga è sempre codificata in UTF-8 ed è usata dai parser per sapere quale codifica è usata nel documento (e la versione XML, ma non è molto usata in realtà. ..) –

+0

Il problema esiste ancora nella soluzione. La prima riga del tuo XML generato è in realtà vuota. Devi mettere la dichiarazione immediatamente dopo i parametri per giocare per renderlo corretto. Questo è un bug per me. – geowa4