Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 声明性客户端URI参数的类型转换_Kotlin_Micronaut - Fatal编程技术网

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

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

我正在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实现一个
    类型转换器

    @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”。有没有办法忽略/排除该字段?我建议您使用该字段创建一个新问题。这将更容易让每个人看到它,并帮助您修复它。这样,您就可以提供代码示例并获得更多信息。当我有时间的时候我会看的。好的建议,我创建了一个新的,请看:。谢谢:)