我正在实现一个带有GET端点的Controller,该端点应该接收以下请求:/mycontroller?myDate=2019-05-01
我的数据类如下
data class MyData(
val myDate: LocalDate
)
还有我的控制器:
@Controller
class MyController {
@Get("{?mydata*}")
fun getMyEndpoint(mydata: MyData)...
}
在我为MyData
提供默认构造函数的情况下,Micronaut仅绑定请求,从而使myDate
可为空或提供默认值-这都不是我想要做的。
有没有办法在不提供默认构造函数的情况下使它正常工作?杰克逊也可以处理。
谢谢:)
答案 0 :(得分:1)
完整的示例:
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)))
}
专业提示:如果您使用的是Jackson和Kotlin,请不要忘记添加jackson-module-kotlin依赖项:
compile "com.fasterxml.jackson.module:jackson-module-kotlin:$YourJacksonVersionHere"