【问题标题】:Error : java.lang.IllegalArgumentException Cannot convert LocalDate in Spring Boot with Graphql?错误:java.lang.IllegalArgumentException 无法使用 Graphql 在 Spring Boot 中转换 LocalDate?
【发布时间】:2021-08-17 16:06:17
【问题描述】:

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

我在 FilterField 中将值转换为 Localdate 时出错。

如何解决生日值的问题?

这是我在 Graphiql 中定义的 query sn-p,如下所示。

{
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)]

这是我的项目文件:My Project

【问题讨论】:

    标签: java spring-boot graphql localdate


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-08-06
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 2020-06-05
      • 2019-01-08
      • 2021-12-22
      • 2019-07-20
      相关资源
      最近更新 更多