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();
}