我正在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
-当然没有帮助
为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)
}
}
是否有一种方法可以实现所需的行为?
答案 0 :(得分:1)
您可以在Enum中覆盖toString
方法,以便当转换器尝试将其转换为字符串时,您可以控制操作的结果:
enum class MyEnum(val stringRep: String) {
AREASONABLENAME("someSillyString");
override fun toString(): String {
return stringRep
}
}