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
,从而使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)))
}
- 调用您的服务器(例如,如果它在端口 8080 上运行):
- 您将在服务器的控制台中看到输出。
专业提示:如果您使用 Jackson 和 Kotlin,请不要忘记包含jackson-module-kotlin依赖项:
compile "com.fasterxml.jackson.module:jackson-module-kotlin:$YourJacksonVersionHere"
推荐阅读
- php - FollowSymLinks 不适用于 laravel 8
- python - 在透视后删除更高级别的索引名称
- puppeteer - Puppeteer 测试运行不一致
- swift - Swift等效于while循环与python中的else
- file - 如何在javascript中使用puppeteer获取默认文件目录
- python - Selenium 按钮不可点击的 Python
- javascript - 在 chrome 扩展中使用 content.js 为按钮添加图像
- nginx - connect() 失败(每个套接字地址(协议/网络地址/端口)通常只允许使用一次)同时连接到上游
- python - Tkinter:如何自由地将 LabelFrames 放入带有类的框架中?
- mysql - 如何在 SQL 中按相等的列值排序和分组?