Ola,
Tenho uma classe UsuariosController, que controla a inserção, atualização e autenticação dos usuarios, a URI, para o metodo adiciona ja é @Path("/usuarios")
mas estou em duvida como ficaria a URI do metodo autentica, pensei no mesmo @Path("/usuarios")
, mas ocorreria um conflito pois acho que no objetivo dos metodos, ambos usariam o metodo http Post, alguem sabe qual seria a maneira certa seguindo o padra de URI’s Rest?
segue a classe UsuariosController
package com.controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import com.dao.UsuarioDAO;
import com.model.Usuario;
import com.util.UsuarioLogado;
@Resource
public class UsuarioController {
private final UsuarioDAO dao;
private final UsuarioLogado usuarioLogado;
private final Result result;
public UsuarioController(UsuarioDAO dao, UsuarioLogado usuarioLogado, Result result) {
this.dao = dao;
this.usuarioLogado = usuarioLogado;
this.result = result;
}
@Path("/usuarios")
public void adiciona(Usuario u) {
dao.adiciona(u);
result.redirectTo(PessoaController.class).lista();
}
@Path("/usuarios/{usuario.id}")
public void atualiza(Long id) {
Usuario u = dao.carrega(id);
dao.atualiza(u);
result.redirectTo(PessoaController.class).lista();
}
@Post @Path("/usuarios/autentica")
public void autentica(Usuario usuario) {
Usuario autenticado = dao.buscaUsuarioPorLoginESenha(usuario);
if (autenticado != null) {
usuarioLogado.efetuaLogin(autenticado);
result.redirectTo(PessoaController.class).lista();
return;
}
result.redirectTo(PessoaController.class).lista();
}
@Post @Path("/")
public void index() {}
}
Pode parecer estranho, mas a ideia de que um verbo não pode estar na URI não nos impede de fazer
Autenticar é um verbo, uma ação, mas autenticação, não.
Esse método poderia ficar assim
@Post("/usuarios/autenticacao")
public void autentica(Usuario usuario) {
Usuario autenticado = dao.buscaUsuarioPorLoginESenha(usuario);
if (autenticado != null) {
usuarioLogado.efetuaLogin(autenticado);
}
result.redirectTo(PessoaController.class).lista();
}