По запросу, простой подход, подобный REST. Он работает почти так же, как и решение Codemwncis, но использует заголовок Accept для согласования содержимого. Сначала файл маршрутов:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Здесь вы не указываете какой-либо тип контента. Это необходимо, ИМХО, только тогда, когда вы хотите иметь «специальные» URI для определенных ресурсов. Например, объявить маршрут, чтобы /users/feed/
всегда возвращаться в Atom / RSS.
Контроллер приложения выглядит так:
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);
}
Как видите, я удалил только метод getUserJSON и переименовал метод getUser. Чтобы разные типы контента работали, вам нужно создать несколько шаблонов. По одному для каждого желаемого типа контента. Например:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Этот подход дает браузерам всегда представление HTML, поскольку все браузеры отправляют тип содержимого text / html в своем заголовке Accept. Все другие клиенты (возможно, некоторые запросы AJAX на основе JavaScript) могут определять свой собственный желаемый тип контента. Используя метод jQuerys ajax (), вы можете сделать следующее:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Это должно дать вам подробную информацию о пользователе с идентификатором 1 в формате JSON. Play в настоящее время поддерживает HTML, JSON и XML изначально, но вы можете легко использовать другой тип, следуя официальной документации или используя модуль согласования содержимого .
Если вы используете Eclipse для разработки, я предлагаю использовать клиентский плагин REST, который позволяет вам тестировать ваши маршруты и соответствующий им тип контента.