当前位置: 首页 > 知识库问答 >
问题:

GraphQL Java没有正确检测kotlin枚举

魏熠彤
2023-03-14

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

我在graphql服务中声明了一个枚举类型,我也在kotlin代码中声明了这个类型。这是我为另一个枚举(时间单位)所做的事情,但对于新枚举(工作日),我得到了一个错误

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

共有1个答案

狄卓君
2023-03-14

通过为Scheduler创建自定义解析器并在其中声明类型和转换来修复此问题

 类似资料:
  • 我是机器学习和OpenCV的新手。我从Cohn-Kanade人脸数据库中为每种情绪(中性和快乐)拍摄了一组10张图像。然后,我从每个图像中提取面部特征,并将它们放入我的训练数据矩阵中,并为各自的情绪分配标签(例如:0表示中性,1表示快乐)。 我使用了gamma=0.1和C=1的RBF内核。经过训练后,我将从智能手机摄像头中提取出的面部特征用于预测。预测总是返回1。 如果我增加中性表达式的训练样本数

  • 为了解决这个问题,我尝试了许多JDK版本,但似乎无论我使用哪个java,结果总是一样的。 MavenReportException:创建存档时出错:无法找到javadoc命令:未正确设置环境变量JAVA_HOME。 我跑了: 导出JAVA_HOME=/usr/lib/jvm/JAVA-8-openjdk-amd64 : MavenReportException:创建存档时出错:无法找到javado

  • 我已经用Gradle 4.0.1安装了Android Studio 2.3.3,它工作得很好,但有一天它似乎没有正确加载。我构建了Gradle,清理并重建了我的项目,它表明构建是正确的,我甚至可以编译,但IDE中的所有内容都是红色的,就像它没有加载库一样。会是什么?很抱歉解释得太短,但这是我的全部。

  • 我正在Java Spring/Hibernate中使用Swagger-UI。Swagger UI版本是2。 我很难使用枚举。

  • 主要内容:使用枚举常量枚举类最基本的用法是实现一个类型安全的枚举。 枚举常量用逗号分隔,每个枚举常量都是一个对象。 枚举初始化 每一个枚举都是枚举类的实例,它们可以被初始化: 默认名称为枚举字符名,值从0开始。若需要指定值,则可以使用其构造函数: 枚举还支持以声明自己的匿名类及相应的方法、以及覆盖基类的方法。如: 如果枚举类定义任何成员,要使用分号将成员定义中的枚举常量定义分隔开 使用枚举常量 Kotlin 中的枚举类

  • 枚举类最基本的用法是实现一个类型安全的枚举。 枚举常量用逗号分隔,每个枚举常量都是一个对象。 enum class Color{ RED,BLACK,BLUE,GREEN,WHITE } 枚举初始化 每一个枚举都是枚举类的实例,它们可以被初始化: enum class Color(val rgb: Int) {     RED(0xFF0000),     GREEN(0x00FF0