Kotlin Micronaut-绑定控制器中的获取参数对象
我正在使用GET端点实现一个控制器,该端点应该接收以下请求: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提供默认
/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"