Filtrar lista com parâmetro Calendar via GET

Olá, estou começando com o Spring e tenho uma dúvida.

Estou tentando retornar uma lista de Produtos em Json quando acessar “relatorio-produtos”. Essa lista de produtos vai ser filtrada a partir de uma data (Calendar) passada via GET (relatorio-produtos?data=2017-3-21).

Controller

@RequestMapping(value = "/relatorio-produtos/{data}", method = RequestMethod.GET)
@ResponseBody
public List<Produto> listaFiltroDataJSON(@PathVariable("data") Calendar dataLancamento) {
    List<Produto> produtos = dao.findPorData(dataLancamento);
    return produtos;
}

DAO

public List<Produto> findPorData(Calendar dataLancamento) {
    return manager.createQuery("select distinct(p) from Produto p join fetch p.precos precos where p.dataLancamento > :dataLancamento", Produto.class)
    .setParameter("dataLancamento", dataLancamento)
    .getResultList();
}

Quando tento acessar recebo o seguitne erro no console:

Erro

Failed to convert value of type ‘java.lang.String’ to required type ‘java.util.Calendar’; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.PathVariable @org.springframework.format.annotation.DateTimeFormat java.util.Calendar] for value ‘2018-07-27’; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2018-07-27]

Alguém tem uma dica de como eu poderia continuar?

Você deve criar um Converter de String para Calendar and registrar no FormatterRegistry em WebMvcConfigurerAdapter.
Aqui tem um exemplo: https://www.logicbig.com/tutorials/spring-framework/spring-web-mvc/spring-mvc-custom-converter.html

1 curtida

Beleza! Vou tentar isso, muito obrigado! :smiley: