Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

400 - Bad Request - Spring MVC

Olá,

Ao executar a URI http://localhost:8080/projeto-jpa-2/produto/buscar estou recebendo o erro "400 - Bad Request". Já procurei bastante sobre o que poderia estar causando, mas não encontrei uma solução. Alguém pode ajudar?

Erro:

HTTP Status 400 – Bad Request
Type Status Report

Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

Método na Controller

    @RequestMapping(value="/buscar", method=RequestMethod.POST, name="buscarProdutos")
    public String buscarPor(Model model,
            @RequestParam String nome, 
            @RequestParam Integer categoriaId,
            @RequestParam(required=false) Integer lojaId) {

        List<Produto> produtos = produtoDao.getProdutos(nome, categoriaId, lojaId);

        model.addAttribute("produtos", produtos);

        return "home";

    }

Método na DAO:

    public List<Produto> getProdutos(String nome, Integer categoriaId, Integer lojaId) {
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Produto> query = criteriaBuilder.createQuery(Produto.class);
        Root<Produto> root = query.from(Produto.class);

        Path<String> nomePath = root.<String> get("nome");
        Path<Integer> lojaPath = root.<Loja> get("loja").<Integer> get("id");
        Path<Integer> categoriaPath = root.join("categorias").<Integer> get("id");

        List<Predicate> predicates = new ArrayList<>();

        if (!nome.isEmpty()) {
            Predicate nomeIgual = criteriaBuilder.like(nomePath, nome);
            predicates.add(nomeIgual);
        }
        if (categoriaId != null) {
            Predicate categoriaIgual = criteriaBuilder.equal(categoriaPath, categoriaId);
            predicates.add(categoriaIgual);
        }
        if (lojaId != null) {
            Predicate lojaIgual = criteriaBuilder.equal(lojaPath, lojaId);
            predicates.add(lojaIgual);
        }

        query.where((Predicate[]) predicates.toArray(new Predicate[0]));

        TypedQuery<Produto> typedQuery = em.createQuery(query);
        return typedQuery.getResultList();

    }
3 respostas
solução!

Você mapeou um method=RequestMethod.POST, como você está tentando acessar essa URL? Pelo browser não vai rolar

De fato o problema estava na forma em que eu estava fazendo o acesso à URL. Fiz o acesso agora pela /home, que por sua vez faz o acesso à /produto e de /produto fiz o acesso /produto/buscar, e deu certo.

Obrigado!

Por nada Fernando, bons estudos =)