gpt4 book ai didi

spring-mvc - 使用 Kotlin 数据类在 Spring @RequestMapping 注释方法中对路径变量进行分组

转载 作者:行者123 更新时间:2023-12-04 00:24:34 26 4
gpt4 key购买 nike

目前,我正在尝试使用 kotlin 数据类减少带有 @RestController 的类注释中 @RequestMapping 注释方法的参数数量。此外,我不想在包含相同路径变量的多个 @RequestMapping 注释方法上重复自己。

下面的代码显示了我的方法,其中 /multiple/ABC/true/123 按预期工作,但 /single/ABC/true/123 提示缺少默认构造函数.

data class Params(@PathVariable("param1") val param1: String,
@PathVariable("param2") val param2: Boolean,
@PathVariable("param3") val param3: Int)

@RestController
class TestController {
@RequestMapping("/single/{param1}/{param2}/{param3}")
fun single(params: Params) {
println(listOf(params.param1, params.param2, params.param3))
}

@RequestMapping("/multiple/{param1}/{param2}/{param3}")
fun multiple(@PathVariable("param1") param1: String,
@PathVariable("param2") param2: Boolean,
@PathVariable("param3") param3: Int) {
println(listOf(param1, param2, param3))
}
}

当我改为使用以下数据类定义时,我得到了一个结果,但该实例不再是不可变的,并且可能有一些字段未更新。

data class Params(@PathVariable("param1") var param1: String = "",
@PathVariable("param2") var param2: Boolean = false,
@PathVariable("param3") var param3: Int = 0)

任何人都可以帮助我完成第一个数据类定义吗?

最佳答案

你不能真的那样做,因为 Spring 不会调用默认构造函数之外的构造函数。

另一个问题是您只能将单个路径变量绑定(bind)到对象,因此您不能以这种方式创建复杂的对象。

我会坚持使用使用 var 的版本,因为它可以正常工作并在您收到请求后创建一个不可变对象(immutable对象)。

另一种选择是将 json 对象作为参数传递,因为 Jackson 对这种反序列化有更全面的支持,或者您可以手动编写反序列化器。

关于spring-mvc - 使用 Kotlin 数据类在 Spring @RequestMapping 注释方法中对路径变量进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54438791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com