Kotlin 声明性客户端URI参数的类型转换
我正在Micronaut中实现一个声明性客户端,如下所示:Kotlin 声明性客户端URI参数的类型转换,kotlin,micronaut,Kotlin,Micronaut,我正在Micronaut中实现一个声明性客户端,如下所示: @Get("/dostuff{?requestObject*}") fun getStuff(requestObject: MyRequestObject): String MyRequestObject包含一个枚举,该枚举由以下字符串表示: data class MyRequestObject(val myEnum: MyEnum) enum class MyEnum(val stringRep: String) { AREA
@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 fun getJsonValue()=stringRep
-当然没有帮助类型转换器
@Singleton
class MyEnumTypeConverter : TypeConverter<MyEnum, String> {
override fun convert(`object`: MyEnum?, targetType: Class<String>?, context: ConversionContext?): Optional<String> {
return Optional.ofNullable(`object`?.stringRep)
}
}
@Singleton
类MyEnumTypeConverter:TypeConverter{
重写有趣的转换(`object`:MyEnum?,targetType:Class?,context:ConversionContext?):可选{
返回可选的.ofNullable(`object`?.stringRep)
}
}
是否有办法实现所需的行为?您可以覆盖枚举中的
toString
方法,以便当转换器尝试将其转换为字符串时,您可以控制操作的结果:
enum class MyEnum(val stringRep: String) {
AREASONABLENAME("someSillyString");
override fun toString(): String {
return stringRep
}
}
谢谢你的回答,效果很好:)但我还有一个问题。我的数据类MyRequestObject也有javax.validation。在类主体中,我有一个方法isValid,它返回一个布尔值,并用@AssertTrue注释,该方法运行良好。当我现在调用我的客户机时,它也会发送一个值“valid=true/false”。有没有办法忽略/排除该字段?我建议您使用该字段创建一个新问题。这将更容易让每个人看到它,并帮助您修复它。这样,您就可以提供代码示例并获得更多信息。当我有时间的时候我会看的。好的建议,我创建了一个新的,请看:。谢谢:)