Conforme solicitação, uma abordagem simples semelhante a REST. Funciona quase da mesma forma que a solução da Codemwncis, mas usa o cabeçalho Aceitar para negociação de conteúdo. Primeiro, o arquivo de rotas:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Você não especifica nenhum tipo de conteúdo aqui. Fazer isso é IMHO apenas necessário quando você deseja ter URIs "especiais" para determinados recursos. Como declarar uma rota para /users/feed/
sempre retornar em Atom / RSS.
O controlador de aplicativo tem a seguinte aparência:
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);
}
Como você pode ver, apenas removi o método getUserJSON e renomeei o método getUser. Para que diferentes tipos de conteúdo funcionem, agora você precisa criar vários modelos. Um para cada tipo de conteúdo desejado. Por exemplo:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Essa abordagem dá aos navegadores sempre a visualização HTML, já que todos os navegadores enviam um tipo de conteúdo text / html em seu cabeçalho Aceitar. Todos os outros clientes (possivelmente algumas solicitações AJAX baseadas em JavaScript) podem definir seu próprio tipo de conteúdo desejado. Usando o método jQuerys ajax (), você pode fazer o seguinte:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Isso deve fornecer a você os detalhes sobre o usuário com o ID 1 no formato JSON. Atualmente, o Play oferece suporte nativo a HTML, JSON e XML, mas você pode usar facilmente um tipo diferente seguindo a documentação oficial ou usando o módulo de negociação de conteúdo .
Se você estiver usando o Eclipse para desenvolvimento, sugiro usar o plugin do cliente REST, que permite testar suas rotas e o tipo de conteúdo correspondente.