Преобразование типов декларативного аргумента URI клиента - PullRequest
0 голосов
/ 03 мая 2019

Я реализую декларативный клиент в 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.

Я безуспешно пробовал следующие вещи:

  1. добавить функцию JsonValue в MyEnum: @JsonValue fun getJsonValue() = stringRep - конечно не помогло

  2. реализовать 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)
        }
    }
    

Есть ли способ добиться желаемого поведения?

1 Ответ

1 голос
/ 03 мая 2019

Вы можете переопределить метод toString в Enum, чтобы при преобразовании преобразователя в строку вы могли контролировать результат операции:

enum class MyEnum(val stringRep: String) {
  AREASONABLENAME("someSillyString");

  override fun toString(): String {
    return stringRep
  }
}
...