Tengo un problema acerca de obtener valores de la consulta de filtro definida en graphiql .

Recibí un error al convertir el valor en localdate en filterfield .

¿Cómo puedo arreglar el problema del valor de cumpleaños?

Aquí está mi stippet definido en graphiql que se muestra a continuación.

{
doctorsWithFilter(filter: {
    birthday:{
      operator: "birthdayDate" 
      value: "1990-05-01"
    }
  }) {
    id
    firstName
    lastName
    age
    salary
    position
    birthday
  }
}

Aquí está mi filterfield objeto que se muestra a continuación.

@Data
public class FilterField {

    private String operator;
    private String value;

    public Predicate generateCriteria(CriteriaBuilder builder, Path field) {
        try {
            int v = Integer.parseInt(value);
            switch (operator) {
                case "lt": return builder.lt(field, v);
                case "le": return builder.le(field, v);
                case "gt": return builder.gt(field, v);
                case "ge": return builder.ge(field, v);
                case "eq": return builder.equal(field, v);
            }
        } catch (NumberFormatException e) {
            switch (operator) {
                case "endsWith": return builder.like(field, "%" + value);
                case "startsWith": return builder.like(field, value + "%");
                case "contains": return builder.like(field, "%" + value + "%");
                case "eq": return builder.equal(field, value);
                case "birthdayDate":

                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

                    try {
                        Date dBegin = dateFormat.parse("1980-01-01");
                        Date dEnd = dateFormat.parse(value); // "1990-05-01"

                        return builder.between(field,
                                dBegin,
                                dEnd);

                    } catch (ParseException parseException) {
                        parseException.printStackTrace();
                    }

            }
        }

        return null;
    }
}

Aquí está mi error en la consulta que se muestra a continuación.

java.lang.IllegalArgumentException: Parameter value [Tue Jan 01 00:00:00 TRT 1980] did not match expected type [java.time.LocalDate (n/a)]

Aquí está mi archivo proyecto : mi proyecto

0
Tony Brand 29 may. 2021 a las 22:53

1 respuesta

La mejor respuesta

-> Convertir fecha a localdate en Funda de cumpleaños.

Aquí está mi respuesta.

case "birthdayDate":

                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

                    String[] values = value.split(",");

                    //Date dBegin = dateFormat.parse(values[0]); // "1980-01-01"
                    //Date dEnd = dateFormat.parse(values[1]); // "1990-05-01"

                    LocalDate dBegin = LocalDate.parse(values[0], formatter);
                    LocalDate dEnd = LocalDate.parse(values[1], formatter);

                    System.out.println("dBegin : " + dBegin);
                    System.out.println("dEnd : " + dEnd);

                    return builder.between(field,
                                dBegin,
                                dEnd);
0
Tony Brand 30 may. 2021 a las 14:11