[Spring MVC: Domine o principal framework web Java]

No livro, no capítulo Validação e conversão de dados, dentro do subtítulo Reaproveitando métodos no controller, é demonstrado para que instanciemos um novo objeto ModelAndView ao retornar o redirecionamento de página, caso não ocorra nenhum erro de validação retornado pelo BindingResult.

No livro, o código é o seguinte:

@RequestMapping(method=RequestMethod.POST)
public ModelAndView save(@Valid Product product,
BindingResult bindingResult,
RedirectAttributes redirectAttributes){
if(bindingResult.hasErrors()){
return form();
}
productDAO.save(product);
redirectAttributes.addFlashAttribute(“sucesso”,
“Produto cadastrado com sucesso”);
return new ModelAndView(“redirect:produtos”);
}

Dessa forma, instanciando o ModelAndView passando redirect:produtos apenas no construtor, tenho problema, pois ao invés de ele direcionar para http://localhost:8080/casadocodigo/produtos, ele direciona para http://localhost:8080/casadocodigo/produtos/produtos.

O que estou fazendo de errado será? Uma coisa que fiz e que funcionou, foi colocar /produtos ao invés de somente produtos.

Quando você faz isso
return new ModelAndView(“redirect:produtos”);
Você está navegando a partir da sua url atual, por isso a duplicação do endereço produtos. Quando coloca a “/” na frente, está navegando a partir da url raiz da sua app:
return new ModelAndView(“redirect:/produtos”);

1 curtida

Tony, muito obrigado pelo retorno! Então, no livro não está sendo especificado a barra / antes do produtos, então isso seria um caso de emitir uma errata para incluírem não? Pois a ausencia da barra não está funcionando de acordo.

Acho que não seria necessário pelo fato de ser um conceito implícito para este tipo de framework.

Bom, anyways a questão da barra definindo a referência do endpoint se aplica à chamada ModelAndView também. Tranquilo então. Mais uma vez muito obrigado pelo retorno!