Wie auf Anfrage, eine einfache REST-Ansatz. Es funktioniert fast genauso wie Codemwncis 'Lösung, verwendet aber den Accept-Header für die Inhaltsverhandlung. Zuerst die Routes-Datei:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Hier geben Sie keinen Inhaltstyp an. Dies ist IMHO nur notwendig, wenn Sie "spezielle" URIs für bestimmte Ressourcen haben wollen. Wie erklärt man eine Route zu /users/feed/
, um immer in Atom/RSS zurückzukehren.
Der Application Controller sieht wie folgt 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 man sehen kann ich entfernt nur die getUserJSON-Methode und die getUser Methode umbenannt. Damit verschiedene Inhaltstypen funktionieren, müssen Sie jetzt mehrere Vorlagen erstellen. Eine für jeden gewünschten Inhaltstyp. Zum Beispiel:
Benutzer.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
USER.HTML:
<html>...</html>
Dieser Ansatz Browser immer die HTML-Ansicht gibt, da alle Browser senden text/html Inhaltstyp in ihrem Accept-Header. Alle anderen Clients (möglicherweise einige JavaScript-basierte AJAX-Anforderungen) können ihren eigenen gewünschten Inhaltstyp definieren. Mit jQuerys Ajax() -Methode Sie Folgendes tun können:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Welche sollten Sie die Details über Benutzer mit der ID 1 im JSON-Format bekommen. Play unterstützt derzeit nativ HTML, JSON und XML, aber Sie können einen anderen Typ verwenden, indem Sie entweder official documentation folgen oder content negotiation module verwenden.
Wenn Sie Eclipse für die Entwicklung verwenden, empfehle ich die REST client plugin, mit der Sie Ihre Routen und den entsprechenden Inhaltstyp testen können.
i schätzen würde, wenn u können hilf mir hier http://stackoverflow.com/questions/32699420/url-parameters-are-not-being-passed-by-curl-post –