Kotlin Micronaut-绑定控制器中的获取参数对象

Kotlin Micronaut-绑定控制器中的获取参数对象,kotlin,micronaut,Kotlin,Micronaut,我正在使用GET端点实现一个控制器,该端点应该接收以下请求:/mycontroller?myDate=2019-05-01 我的数据类看起来像这样 data class MyData( val myDate: LocalDate ) 和我的控制器: @Controller class MyController { @Get("{?mydata*}") fun getMyEndpoint(mydata: MyData)... } Micronaut仅在我为MyData提供默认

我正在使用GET端点实现一个控制器,该端点应该接收以下请求:
/mycontroller?myDate=2019-05-01

我的数据类看起来像这样

data class MyData(
   val myDate: LocalDate
)
和我的控制器:

@Controller
class MyController {

  @Get("{?mydata*}")
  fun getMyEndpoint(mydata: MyData)...

}
Micronaut仅在我为
MyData
提供默认构造函数的情况下绑定请求,从而使
myDate
可为空或提供默认值-这两者都不是我想要做的

有没有一种方法可以在不提供默认构造函数的情况下使其工作?杰克逊也能应付


谢谢:)

完整的工作示例:

import io.micronaut.core.convert.ConversionContext
import io.micronaut.core.convert.TypeConverter
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import java.time.LocalDate
import java.util.*
import javax.inject.Singleton

@Controller("/base")
class MyController {

   @Get("/path")
   fun getMyEndpoint(myData: MyData) {
      println("MyData: $myData")
   }

}

data class MyData(
   val myDate: LocalDate
)

@Singleton
class MyDataConverter : TypeConverter<String, MyData> {
   override fun convert(obj: String, targetType: Class<MyData>, context: ConversionContext?): Optional<MyData> =
      Optional.of(MyData(myDate = LocalDate.parse(obj)))
}

我希望有一种方法可以直接绑定对象本身,而不必手动重新创建对象:“你是什么意思?具体什么不起作用?“我正在实现一个带有GET端点的控制器,该端点应该接收以下简化数据:“-为什么要使用
GET
请求将JSON发送到服务器?在我的实际应用程序中,我的GET中有大约8-10个参数,我必须手动将这些参数组合到一个对象中。我希望有一种类似于Spring的方法将对象本身绑定到请求,就像您在Spring中所做的那样。它也适用于日期和嵌套对象:和@JeffScottBrown我将编辑我的问题以使其更清楚。从未使用过Micronaut,但我花了20秒找到了这个,它似乎准确地描述了您想要做的事情:它的完成方式在文档后面有描述:感谢提供代码。如果MyData的属性不止一个,会发生什么情况?您需要相应地调整MyDataConverter。是的,当然可以,但是我有一个原始字符串,必须从中手动解析MyData对象?是的。您可以执行如下操作:
jacksonObjectMapper().readValue(jsonString,MyData::class.java)
,但正如其他人所说:不要在查询参数中发送json。只要做一个帖子,把它放在身体里。这将为您省去麻烦(即编码问题等)
compile "com.fasterxml.jackson.module:jackson-module-kotlin:$YourJacksonVersionHere"