GraphQL Java 未正确检测 kotlin 枚举

GraphQL Java is not detecting kotlin enum correctly

我正在使用 graphql spring boot kickstarter - https://github.com/graphql-java-kickstart/graphql-spring-boot 以创建 spring graphql 服务。我正在使用 kotlin 构建实际服务。

我在我的 graphql 服务中声明了一个枚举类型,我也在我的 kotlin 代码中声明了它。这是我为另一个枚举 (TimeUnit) 所做的事情,但对于新枚举 (WeekDay) 我收到一个错误

我曾尝试为枚举类型创建显式解析器,但无济于事。

package com.houseshare.server.data.entity

import com.vladmihalcea.hibernate.type.array.IntArrayType
import org.hibernate.annotations.GenericGenerator
import org.hibernate.annotations.TypeDef
import org.hibernate.annotations.TypeDefs
import java.util.*
import javax.persistence.*
import javax.validation.constraints.Size


@Entity
@Table(name = "scheduler")
@TypeDefs(
    TypeDef(
            typeClass = IntArrayType::class,
            defaultForType = Array<Int>::class
    )
)
class Scheduler(
        @Id @GeneratedValue(generator = "UUID")
        @GenericGenerator(
                name = "UUID",
                strategy = "org.hibernate.id.UUIDGenerator"
        ) val id: UUID = UUID.randomUUID(),
        @Column(length = 50)
        @Size(max = 50)
        var name: String,
        @Column
        var duration: Int? = null,
        @Column
        @Enumerated(EnumType.ORDINAL)
        var durationUnit: TimeUnit?  = null,
        @Column
        var frequency: Int?  = null,
        @Column
        @Enumerated(EnumType.ORDINAL)
        var frequencyUnit: TimeUnit?  = null,
        @Column
        var scheduleDays: Array<Int>?  = null,
        @Column
        @Temporal(TemporalType.TIME)
        var scheduleTime: Date?  = null,
        @Column
        var effort: Int?  = null
    ) {

    override fun toString(): String {
        return "Scheduler [id= + ${this.id}]";
    }

    fun getScheduleDaysList() : List<WeekDay>? {
        return scheduleDays?.map { WeekDay.fromInt(it) }
    }

    fun setScheduleDaysList(daysOfWeek : List<WeekDay>?) {
        if(daysOfWeek == null) {
            this.scheduleDays = null;
        } else {
            this.scheduleDays = daysOfWeek.map { it.value }.toTypedArray();
        }
    }

}

enum class TimeUnit {
    MINUTE, HOUR, DAY, WEEK, MONTH
}

enum class WeekDay(val value: Int) {
    MONDAY(1),
    TUESDAY(2),
    WEDNESDAY(3),
    THURSDAY(4),
    FRIDAY(5),
    SATURDAY(6),
    SUNDAY(7);

    companion object {
        fun fromInt(value: Int) = WeekDay.values().first { it.value == value }
    }
}

Graphql 架构:

type Scheduler {
    id: ID!,
    name: String!
    duration: Int,
    durationUnit: TimeUnit,
    frequency: Int,
    frequencyUnit: TimeUnit,
    scheduleDays: [WeekDay],
    scheduleTime: Time
}

type Time

enum TimeUnit {
    MINUTE,
    HOUR,
    DAY,
    WEEK,
    MONTH
}

enum WeekDay {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

产生的错误信息是: Type 'WeekDay' is declared as an enum in the GraphQL schema but is not a Java enum!

通过为调度程序创建自定义解析器并在其中声明类型和转换来解决此问题