Ошибка : java.lang.Исключение IllegalArgumentException Не может преобразовать LocalDate при весенней загрузке с помощью Graphql?

#java #spring-boot #graphql #localdate

Вопрос:

У меня проблема с получением значений из определенного запроса фильтра в Graphiql.

Я получил ошибку при преобразовании значения в Localdate в поле фильтра.

Как я могу решить проблему со значением дня рождения?

Вот фрагмент моего запроса, определенный в Graphiql, который показан ниже.

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

Вот мой объект FilterField, который показан ниже.

 @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;
    }
}
 

Вот моя ошибка в запросе, которая показана ниже.

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

Вот мой файл проекта : Мой проект

Ответ №1:

-> Преобразовать дату в локальную дату в случае даты рождения.

Вот мой ответ.

 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);