错误:java.lang.IollegalArgumentException无法使用Graphql在Spring Boo



我在从Graphiql中定义的过滤器查询中获取值时遇到问题。

FilterField中将值转换为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)]

这是我的项目文件:我的项目

->在birthdayDate的情况下,将日期转换为LocalDate。

这是我的答案。

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

最新更新