2012-01-03 27 views
6

Tôi đang đùa giỡn với việc xây dựng một ứng dụng đơn giản để làm ướt đôi chân của mình bằng Play! 2.0. Tôi muốn có thể phân phát tài nguyên của mình dưới dạng XML (nguồn cấp dữ liệu ATOM, thực sự) và JSON. Tôi biết làm thế nào để làm điều đó trong 1.2.x, nhưng cách đó dường như không làm việc với 2.0. Có ai biết làm thế nào để làm điều đó? Ví dụ sẽ được nhiều đánh giá cao.Cách phân phối XML và JSON bằng Play! 2.0

Trả lời

11

Đối với JSON tôi sẽ khuyên bạn nên nhìn vào câu hỏi này How to render JSON response in Play framework v2.0 (latest build from GIT)

XML là xa hơn đơn giản vì bạn chỉ có thể gọi trở lại kết quả với mã như thế này:

Ok(Xml(xmlString)) 

Nhưng cách sạch, để chơi bóng sử dụng chức năng này có lẽ để viết mẫu của riêng bạn dưới views/xml như mdo.scala.xml có thể

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

Sau đó, trong điều khiển của bạn

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

Nếu không, bạn có thể có chức năng tương tự như ToXml toJson với sự giúp đỡ của một thư viện marshaling

+0

tôi sẽ cung cấp cho bạn những dấu chọn, nhưng đây là một điều cần thiết bạn cần làm ngoài những gì bạn đã đề cập. Để hợp lệ, dòng đầu tiên của bạn phải giống như '@ (bài đăng: Seq [Đăng]) '. Nếu bạn không làm điều đó, dòng đầu tiên của bạn sẽ không phải là một tuyên bố xml như nó nên. Lỗi? Có lẽ. – geowa4

+0

KHÔNG có dòng này là bắt buộc! Tôi chỉ quên đề cập đến nó. Hãy để tôi thêm nó. Trên thực tế nó là một phần của đặc tả XML, dòng này luôn luôn được mã hóa trong UTF-8 và được sử dụng bởi các trình phân tích cú pháp để biết mã hóa nào được sử dụng trong tài liệu (và phiên bản XML, nhưng nó không được sử dụng nhiều lắm. ..) –

+0

Sự cố vẫn tồn tại trong giải pháp của bạn. Dòng đầu tiên của XML được tạo của bạn thực sự trống. Bạn cần phải đặt tuyên bố ngay lập tức sau khi các tham số để chơi để làm cho nó đúng. Đó là một lỗi đối với tôi. – geowa4

Các vấn đề liên quan