Я использую кикстартер подпружиненной загрузки graphql - https://github.com/graphql-java-kickstart/graphql-spring-boot для создания службы подпрограммы graphql. Я создаю реальный сервис, используя kotlin.
Я объявляю тип enum в своем сервисе 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!