Auf Anfrage ein einfacher REST-ähnlicher Ansatz. Es funktioniert fast genauso wie die Lösung von Codemwncis, verwendet jedoch den Accept-Header für die Inhaltsverhandlung. Zuerst die Routendatei:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Sie geben hier keinen Inhaltstyp an. Dies ist meiner Meinung nach nur erforderlich, wenn Sie "spezielle" URIs für bestimmte Ressourcen haben möchten. Als würde man eine Route deklarieren, /users/feed/
um immer in Atom / RSS zurückzukehren.
Der Anwendungscontroller sieht folgendermaßen aus:
public static void createUser(User newUser) {
newUser.save();
user(newUser.id);
}
public static void updateUser(Long id, User user) {
User dbUser = User.findById(id);
dbUser.updateDetails(user); // some model logic you would write to do a safe merge
dbUser.save();
user(id);
}
public static void deleteUser(Long id) {
User.findById(id).delete();
renderText("success");
}
public static void user(Long id) {
User user = User.findById(id)
render(user);
}
Wie Sie sehen, habe ich nur die Methode getUserJSON entfernt und die Methode getUser umbenannt. Damit verschiedene Inhaltstypen funktionieren, müssen Sie jetzt mehrere Vorlagen erstellen. Eine für jeden gewünschten Inhaltstyp. Beispielsweise:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Dieser Ansatz gibt Browsern immer die HTML-Ansicht, da alle Browser einen Text- / HTML-Inhaltstyp in ihrem Accept-Header senden. Alle anderen Clients (möglicherweise einige JavaScript-basierte AJAX-Anforderungen) können ihren eigenen gewünschten Inhaltstyp definieren. Mit der Methode jQuerys ajax () können Sie Folgendes tun:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Damit sollten Sie die Details zu Benutzer mit der ID 1 im JSON-Format erhalten. Play unterstützt derzeit HTML, JSON und XML nativ. Sie können jedoch problemlos einen anderen Typ verwenden, indem Sie entweder der offiziellen Dokumentation folgen oder das Modul für die Inhaltsverhandlung verwenden .
Wenn Sie Eclipse für die Entwicklung verwenden, empfehle ich die Verwendung des REST-Client-Plugins, mit dem Sie Ihre Routen und den entsprechenden Inhaltstyp testen können.