# \[Spring MVC: Domine o principal framework web Java\]

**URL:** <https://forum.casadocodigo.com.br/t/spring-mvc-domine-o-principal-framework-web-java/866>\
**Category:** Livros\
**Tags:** spring-mvc\
**Created:** [Dezembro 9, 2017, 10:54pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-domine-o-principal-framework-web-java/866 "2017-12-09T22:54:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![dseabra84](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.casadocodigo.com.br/dseabra84/32/11213_2.png) [@dseabra84](https://forum.casadocodigo.com.br/u/dseabra84)\
**Post date:** [Dezembro 9, 2017, 10:54pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-domine-o-principal-framework-web-java/866/1 "2017-12-09T22:54:24Z")

</div>

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`.

---

<div class="post-metadata">

**Author:** ![tonyblack\_si](https://avatars.discourse-cdn.com/v4/letter/t/4bbf92/32.png) [@tonyblack\_si](https://forum.casadocodigo.com.br/u/tonyblack_si)\
**Post date:** [Dezembro 12, 2017, 10:55pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-domine-o-principal-framework-web-java/866/2 "2017-12-12T22:55:03Z")

</div>

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”);`

---

<div class="post-metadata">

**Author:** ![dseabra84](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.casadocodigo.com.br/dseabra84/32/11213_2.png) [@dseabra84](https://forum.casadocodigo.com.br/u/dseabra84)\
**Post date:** [Fevereiro 8, 2018, 12:51pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-domine-o-principal-framework-web-java/866/3 "2018-02-08T12:51:48Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![tonyblack\_si](https://avatars.discourse-cdn.com/v4/letter/t/4bbf92/32.png) [@tonyblack\_si](https://forum.casadocodigo.com.br/u/tonyblack_si)\
**Post date:** [Fevereiro 8, 2018, 5:21pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-domine-o-principal-framework-web-java/866/4 "2018-02-08T17:21:49Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![dseabra84](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.casadocodigo.com.br/dseabra84/32/11213_2.png) [@dseabra84](https://forum.casadocodigo.com.br/u/dseabra84)\
**Post date:** [Fevereiro 9, 2018, 8:10pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-domine-o-principal-framework-web-java/866/5 "2018-02-09T20:10:25Z")

</div>

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!
