spring - Spring 如何将查询参数反序列化为 Kotlin 数据类?
问题描述
假设一个 Spring@RestController
带有一个简单@GetMapping
的接受一个VenueQuery
数据类作为它的参数:
data class VenueQuery(
val cityId: Long? = null,
val countryIso: String? = null,
)
@RestController
open class VenueController {
@GetMapping("/venues")
open fun getVenues(
request: HttpServletRequest,
response: HttpServletResponse,
venueQuery: VenueQuery
) { ... }
}
运行上面的代码,工作“很好”。GET /venues?cityId=1&countryIso=CZ
反序列化为VenueQuery(cityId=1, countryIso="CZ"}
.
但是,使用 注释venueQuery 函数参数@RequestParam
会导致使用 拒绝相同的请求BAD_REQUEST "Missing required parameter 'venueQuery'"
。这是有道理的,但会使前一种情况更加混乱。
经过一段时间的搜索,我仍然无法回答以下问题:
- 在哪里可以找到更详细地描述此行为的文档?即我可以指出的任何参考,而不是依赖一次性观察?
- 第一种情况甚至是预期的行为吗?
- spring 如何知道它应该
venueQuery
使用查询参数而不是request
and参数填充response
参数?它是否通过其 servlet 请求/响应的类型来推断? - 一般来说,我很难找到关于 Spring 注释和原则如何在 Kotlin 中应用的任何文档(不是“如何”而是文档)。有什么值得注意的来源吗?
感谢您的任何回答!
解决方案
- 预期的行为?
是的。
- spring 如何知道它应该用查询参数填充venueQuery 参数?
按其类型。尝试两个,VenueQuery
看看会发生什么。
- 一般来说,我很难找到任何文件......
除非行为明显不同,否则没有特别提到 Kotlin。至于“显着来源”,我总是在他们的源代码中找到我正在寻找的答案。喝杯咖啡,启动调试器,你也会的。
推荐阅读
- python - pandas DataFrame中文本列的左对齐格式 - 不适用于空格
- python - 将 Matlab 代码转换为 Python 的有效方法
- python - 名称“app_config”未定义
- javascript - oracle apex 从 javascript 代码重定向到页面
- r - R:lapply,收到我的代码的未使用参数错误
- 2d-games - 如何在 pixi.js 中实现黄油平滑运动(没有任何滞后/尖峰)
- reactjs - Ionic React useState 值在道具函数中使用后消失
- batch-file - 我想使用批处理文件从文本文件中执行几个 cmd 命令
- python - 我不知道当尝试将 pip 从 20.2.2 升级到 20.2.3 时会发生什么显示错误
- selenium - Selenium - LoadableComponent 和 SlowLoadableComponent 有什么区别