10

Playを使用してRESTAPIを開発しました!フレームワーク1.2.4、そして私はフレームワークがとても好きです。シンプルさと迅速な開発サイクルにより、従来のJavaEEルートを使用した場合の数分の1の時間でこれを達成できました。

今、私はPlayを使って探索しています!次のプロジェクトでは2.0.3。フレームワークが強化され、 Webアプリの開発がさらに容易になっている一方で、RESTAPIについては同じことが言えないことがわかりました。私のアプリにはHTMLがまったく含まれていません。XMLやJSON、または将来使用することにしたデータ交換形式で応答するだけです。

したがって、問題は次のとおりです。

ここで誰かがPlay2.0.xを使用して非htmlの純粋なRESTAPIを公開したことがありますか?

詳細:

これが、1.2.xと比較してPlay2.0.xで純粋なRESTAPIを開発することをより困難にしていると私が感じるいくつかの要因です。私が間違っている場合は、私の理解を訂正してください。

コンテントネゴシエーションは難しい

劇中!1.2.4、コンテントネゴシエーションがフレームワークに組み込まれました。ルートファイルで、リクエストが期待するコンテンツタイプを正しく定義するオプションがありました。

GET /friends User.listFriends(format:'xml')

次に、コントローラーで、

public static void getFriends(){
    render();
}

これにより、views/xml/User/listFriends.xmlテンプレートが自動的にレンダリングされます。明日JSONのサポートを追加するには、views/json/User/listFriends.jsonテンプレートを追加するだけで済みました。

これが実際にどのように行われるのかわかりません!2.0.x

HTML以外のテンプレートの作成は直感的ではありません

試行錯誤の末、たとえば、playのviewsフォルダーにlistFriends.scala.xmlを作成できることがわかりました。2.0。次に、次のようにコントローラーコードで呼び出す必要があります。

return ok(views.xml.listFriends.render());

views.xml.listFriendsただし、Eclipseはこれを好みません。これは、Playのコンパイルが完了した後にのみ生成されるため、Eclipseはそれを認識しないためです。ここで足りないものはありますか?

4

2 に答える 2

5

Play(Scala)では、次のようなことができます。

val myXMl = obtainXML();
return Ok(myXML).as("text/xml")

Javaの構文はわかりませんが、同等です。テンプレートを作成する代わりに、XMLを生成してからユーザーに送信し、戻り値のタイプを「text / xml」(またはjsonまたは必要なものは何でも)。

于 2012-09-07T13:01:10.850 に答える
5

Pere Villegaが説明したように、ただしJava構文を使用します。

String xml = getXMLAsString();
return ok(xml).as("text/xml");

as()メソッドStatusクラスの一部です。

または、代替手段は次のとおりです。

String xml = getXMLAsString();
response().setContentType("text/xml")
return ok(xml);
于 2012-09-07T13:35:08.180 に答える