声明性客户端 URI 参数的类型转换
Type conversion of declarative client URI argument
我正在 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)
}
}
有没有办法实现所需的行为?
您可以覆盖 Enum 中的 toString
方法,以便当转换器尝试将其转换为字符串时您可以控制操作的结果:
enum class MyEnum(val stringRep: String) {
AREASONABLENAME("someSillyString");
override fun toString(): String {
return stringRep
}
}
我正在 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) } }
有没有办法实现所需的行为?
您可以覆盖 Enum 中的 toString
方法,以便当转换器尝试将其转换为字符串时您可以控制操作的结果:
enum class MyEnum(val stringRep: String) {
AREASONABLENAME("someSillyString");
override fun toString(): String {
return stringRep
}
}