Ao chegar no último passo da aula (anotar o controller de produto com o request mapping)
@Controller @RequestMapping("/produtos") public class ProdutosController {
// restante do código omitido
}
o controller para de funcionar e só aparece erro 404.
Sem a anotação, tudo funciona. Qual a diferença que ela faz no projeto?
Segue minha classe controller:
package br.com.casadocodigo.loja.controllers;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import br.com.casadocodigo.loja.daos.ProdutoDAO; import br.com.casadocodigo.loja.models.Produto; import br.com.casadocodigo.loja.models.TipoPreco; import br.com.casadocodigo.loja.validation.ProdutoValidation;
@Controller @RequestMapping("/produtos") public class ProdutosController {
@Autowired
private ProdutoDAO produtoDAO;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.addValidators(new ProdutoValidation());
}
@RequestMapping("/produtos/form")
public ModelAndView form(){
ModelAndView modelAndView = new ModelAndView("produtos/form");
modelAndView.addObject("tipos", TipoPreco.values());
return modelAndView;
}
@RequestMapping(value="/produtos", method=RequestMethod.GET)
public ModelAndView listar() {
List<Produto> produtos = produtoDAO.listar();
ModelAndView modelAndView = new ModelAndView("produtos/lista");
modelAndView.addObject("produtos", produtos);
return modelAndView;
}
@RequestMapping(value="/produtos", method=RequestMethod.POST)
public ModelAndView gravar(@Valid Produto produto, BindingResult result, RedirectAttributes redirectAttributes){
System.out.println(produto);
if (result.hasErrors()) {
return form();
}
produtoDAO.gravar(produto);
redirectAttributes.addFlashAttribute("sucesso","Produto cadastrado com sucesso!");
return new ModelAndView("redirect:produtos");
}
}
}