1
resposta

Pesquisar por Período Data no Spring MVS

Pessoal, boa noite.

Estou desenvolvendo um projeto de estudo em Java com Spring MVC e surgiu uma dúvida.

Tenho uma classe Despesa usada para criar registros de depesas. === atributos da classe Despesa === private String descricao; private BigDecimal valor; private LocalDate dataVencimento; private LocalDate dataPagamento; Em meu repository criei o método abaixo para permitir receber os parâmetros dataInicial e a dataFinal e com eles pesquisar no banco e carregar uma lista contendo somente as despesas com vencimento dentro do período. === repository === public interface DespesaRepository extends JpaRepository<Despesa, Long> { List findAllByDataVencimentoGreaterThanEqualAndDataVencimentoLessThanEqual(LocalDate dataInicial, LocalDate dataFinal); } No DespesaController criei um método Get que utiliza o método do repository e retorna uma Lista somente com as despesas dentro do período informado. @GetMapping("/vencimento") public String carregarListagemDespesasPorPeriodo(Model model) { LocalDate dataInicial = LocalDate.of(2023, 10,01); LocalDate dataFinal = LocalDate.of(2023, 10,31); List despesas = repository.findAllByDataVencimentoGreaterThanEqualAndDataVencimentoLessThanEqual(dataInicial, dataFinal); var despesa = new Despesa(); BigDecimal totalDespesas = despesa.calculaTotalDespesas(despesas); BigDecimal totalPago = despesa.calculaTotalPago(despesas); BigDecimal totalDevido = despesa.calculaTotalAPagar(despesas); model.addAttribute("listaDeDespesas", despesas); model.addAttribute("totalDespesas", totalDespesas); model.addAttribute("totalPago", totalPago); model.addAttribute("totalDevido", totalDevido); return "despesa/listagem"; } === problema === Uma vez a dataInicial e dataFinal não são atributos da classe Despesa e não fazem parte do Objeto, não sei como pegar esses dados de um input via Formulário Html com Thymeleaf e passar para o @GetMapping("/vencimento") acima. Poderiam me ajudar?

1 resposta

Olá, Eduardo

Uma forma de fazer isso é utilizando um formulário HTML com os campos de input para as datas. Você pode adicionar os campos no seu arquivo HTML da seguinte forma:

<form action="/vencimento" method="get">
    <label for="dataInicial">Data Inicial:</label>
    <input type="date" id="dataInicial" name="dataInicial">
    
    <label for="dataFinal">Data Final:</label>
    <input type="date" id="dataFinal" name="dataFinal">
    
    <input type="submit" value="Pesquisar">
</form>

Dessa forma, quando o formulário for submetido, os valores dos campos dataInicial e dataFinal serão enviados para a URL /vencimento através do método GET.

No seu método carregarListagemDespesasPorPeriodo, você pode receber esses valores como parâmetros:

@GetMapping("/vencimento")
public String carregarListagemDespesasPorPeriodo(@RequestParam("dataInicial") LocalDate dataInicial, @RequestParam("dataFinal") LocalDate dataFinal, Model model) {
    List<Despesa> despesas = repository.findAllByDataVencimentoGreaterThanEqualAndDataVencimentoLessThanEqual(dataInicial, dataFinal);
    // Restante do código...
}

Dessa forma, você terá acesso aos valores das datas informadas no formulário dentro do seu método.

Espero ter ajudado! Bons estudos!