声明性客户端URI参数的类型转换

时间:2019-05-03 07:51:04

标签: kotlin micronaut

我正在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. 为MyEnum实现TypeConverter

    @Singleton
    class MyEnumTypeConverter : TypeConverter<MyEnum, String> {
        override fun convert(`object`: MyEnum?, targetType: Class<String>?, context: ConversionContext?): Optional<String> {
            return Optional.ofNullable(`object`?.stringRep)
        }
    }
    

是否有一种方法可以实现所需的行为?

1 个答案:

答案 0 :(得分:1)

您可以在Enum中覆盖toString方法,以便当转换器尝试将其转换为字符串时,您可以控制操作的结果:

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

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