Oi Pedro,
Você pode receber todos os parâmetros no seu DTO como sendo opcionais e montar uma querie dinamica:
public class ConsultaPessoaForm {
private String nome;
private String status;
private String natureza;
//getters e setter
}
@RequestMapping("/pessoas")
public List<PessoaDto> consultaPorFiltros(ConsultaPessoaForm form) {
List<Pessoa> pessoas = pessoaRepository.consultaPorFiltros(form.getNome(), form.getStatus(), form.getNatureza());
// converter para dto e retornar a lista...
}
public interface PessoaRepository extends JpaRepository<Pessoa, Long> {
@Query("SELECT p FROM Pessoa p WHERE (:nome IS NULL OR p.nome LIKE :nome) AND (:status IS NULL OR p.status LIKE :status) AND (:natureza IS NULL OR p.natureza LIKE :natureza)")
List<Pessoa> consultaPorFiltros(String nome, String status, String natureza);
}
Bons estudos!