Я реализую декларативный клиент в Micronaut, который выглядит следующим образом:
@Get("/dostuff{?requestObject*}")
fun getStuff(requestObject: MyRequestObject): String
Мой MyRequestObject содержит перечисление, представленное некоторой строкой:
data class MyRequestObject(val myEnum: MyEnum)
enum class MyEnum(val stringRep: String) {
AREASONABLENAME("someSillyString");
}
Когда я сейчас отправляю запрос через клиента, значение из requestObject
создает следующий запрос /?myEnum=AREASONABLENAME
. Что мне действительно нужно, так это /?myEnum=someSillyString
.
Я безуспешно пробовал следующие вещи:
добавить функцию JsonValue в MyEnum:
@JsonValue fun getJsonValue() = stringRep
- конечно не помогло
реализовать TypeConverter
для MyEnum
@Singleton
class MyEnumTypeConverter : TypeConverter<MyEnum, String> {
override fun convert(`object`: MyEnum?, targetType: Class<String>?, context: ConversionContext?): Optional<String> {
return Optional.ofNullable(`object`?.stringRep)
}
}
Есть ли способ добиться желаемого поведения?