По запросу простой 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, поскольку все браузеры отправляют текстовый / html тип содержимого в своем заголовке Accept. Все остальные клиенты (возможно, некоторые запросы AJAX на основе JavaScript) могут определять свой собственный желаемый тип контента. Используя метод jQuerys ajax (), вы можете сделать следующее:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Который должен получить информацию о пользователе с идентификатором 1 в формате JSON. Play в настоящее время поддерживает HTML, JSON и XML, но вы можете легко использовать другой тип, следуя официальной документации или используя модуль согласования контента .
Если вы используете Eclipse для разработки, я предлагаю использовать клиентский плагин REST , который позволяет вам проверять ваши маршруты и соответствующий им тип контента.