[Resolvido]Url Dinamica

7 respostas
guilherme.dio

Estou fazendo um sisteminha de receitas com o Spring MVC, e já implementei um action em um dos meus Controllers de entidade, onde o usuário passa parâmetro pela URL:

@RequestMapping("/{titulo}")
	public String exibeReceita(@PathVariable String titulo,Model model,HttpServletResponse response)
	{
		//Trata a String
		titulo = titulo.replace("-", " ");
		
		//Recupera do banco
		List<Receita> receitas = this.daoReceita.getPorCampo(Receita.CAMPO_TITULO, Dao.EQUALS, titulo);
		
		//Verifica se existe a receita
		if(receitas.isEmpty())
		{
			response.setStatus(404);
			return "/404";
		}
		//Retorna a view+dados
		model.addAttribute("receita", receitas.get(0));
		return "receita/exibe";
	}

Este action simplesmente pega a variável vinda da URL e remove os traços, depois faz um select no banco do titulo da receita que é igual ao parametro informado…até ai OK.

Porém, e nos casos em que tiver dois registros com 2 titulos iguais ? existe algum padrão utilizado para este tipo de coisa ?

Porque pensei em trocar a url pelo titulo para url pelo id, mas ai vai ficar feio, queria pelo título mesmo porque ficaria algo asism por exemplo:

www.receitas.com.br/receitas/Bolo-De-Chocolate  //Título da receita

Não queria ter que fazer isso:

www.receitas.com.br/receitas/19239123  //ID da receita

Muito menos isso :

www.receitas.com.br/receitas/?id=19283912&titulo=Bolo+De+Chocolate //GET

Aguardo opiniões, obrigado…

7 Respostas

drsmachado

A URL nada tem a ver com o fato de existirem registros duplicados no banco.
O controle de busca é que não pode ser feito pelo título, mas, por um identificador único.

guilherme.dio

Mas a URL deve ficar elegante, aparecendo o titulo, por exemplo.

Como você faria neste caso ?

drsmachado

Já respondi isso. Você não precisa alterar a URL, ela ainda pode ser cheia de fru fru como você quer.
Agora, a consulta no banco não deve ser feita pelo título (se eu entendi bem, você faz a consulta baseado no título).

guilherme.dio

drsmachado:
Já respondi isso. Você não precisa alterar a URL, ela ainda pode ser cheia de fru fru como você quer.
Agora, a consulta no banco não deve ser feita pelo título (se eu entendi bem, você faz a consulta baseado no título).

Entendido…

Mas como vou fazer a consulta sem ser pelo título se o único recurso que recebo é o título(que vem pelo @PathVariable) ?

drsmachado

Pensa comigo:
Eu posso ter o mesmo título (pudim de leite) para várias formas de produzir uma receita (banho maria, com coco, com calda, de forno, rápido).
Se você passar um ID, por exemplo, ele permitirá identificar qual das receitas é a que você procura.
E se você não consegue imaginar isso com receitas, pense com João da Silva. Como a Casas Bahia sabe que aquele João da Silva não é mau pagador? Consultando o CPF (que nem sempre é único, mas…)

guilherme.dio

Entendi, eu tinha pensado em algo assim, apesar de que vai mudar um pouco a URL:

www.sitereceitas.com.br/receitas/Bolo-De-Chocolate-9823

É isso que você quis dizer ? onde recebo o titulo e o id na url…

guilherme.dio

Resolvi fazer assiim:

@RequestMapping("/{titulo}/{codigo}")
	public String exibeReceita(@PathVariable long codigo,Model model,HttpServletResponse response)
	{
		//Recupera do banco
		Receita receita = this.daoReceita.get(codigo)
		
		//Verifica se existe a receita
		if(receita == null)
		{
			response.setStatus(404);
			return "/404";
		}
		//Retorna a view+dados
		model.addAttribute("receita", receita);
		return "receita/exibe";
	}
Criado 28 de junho de 2012
Ultima resposta 28 de jun. de 2012
Respostas 7
Participantes 2