2
respostas

ENDPOINT - Busca por intervalo de Datas

Olá a todos! Estou tentando desenvolver um endpoint que faça busca no DB por um intervalo de datas fornecido pelo usuário porém quando testo no postman dá o seguinte erro. "Parameter value [2021-02-01] did not match expected type [java.util.Date (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [2021-02-01] did not match expected type [java.util.Date (n/a)]". Segue abaixo código, se alguém souber onde estou errando me dá um alô por favor! : )

O primeiro trecho de código é referente o atributo date da classe Conta, o segundo referente a interface do repositório e o terceiro referente ao controller.

@Temporal(value = TemporalType.DATE)
@DateTimeFormat(pattern = "yyyy/MM/dd")
 private Date date = new Date();

@Query("SELECT t FROM Conta t WHERE t.date BETWEEN :inicio and :termino")
public List<Conta> findByPeriod(String inicio, String termino);

@GetMapping(value = "/findByPeriod/{inicio}/{termino}")
public ResponseEntity<List<Conta>> findByPeriod(@PathVariable String inicio, @PathVariable String termino) {
    List<Conta> collection = contaRepository.findByPeriod(inicio, termino);
    return ResponseEntity.ok().body(collection);
    }
2 respostas

Oi Franco,

Pode ser por conta dessa anotação: @DateTimeFormat(pattern = "yyyy/MM/dd") que define a data no formato yyyy/MM/dd mas ao testar você está enviando a data no formato yyyy-MM-dd e por isso acontece a exception.

Recomendo você alterar o tipo Date para o LocalDate do Java 8, além de receber os parâmetros no controller como query param ao invés de path param:

private LocalDate date = LocalDate.now();
@GetMapping(value = "/findByPeriod")
public ResponseEntity<List<Conta>> findByPeriod(LocalDate inicio, LocalDate termino) {
    List<Conta> collection = contaRepository.findByPeriod(inicio, termino);
    return ResponseEntity.ok().body(collection);
}
public List<Conta> findByPeriod(LocalDate inicio, LocalDate termino);

Para testar no postman:

GET /topicos/findByPeriod?inicio=2020-01-01&termino=2020-01-15

Bons estudos!