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