Spring boot 逗号分隔的请求参数不适用于Kotlin数据类
我有一个端点可以接受几十个请求参数。最好在一个数据类中收集所有这些参数。此外,请求参数必须用逗号分隔Spring boot 逗号分隔的请求参数不适用于Kotlin数据类,spring-boot,kotlin,Spring Boot,Kotlin,我有一个端点可以接受几十个请求参数。最好在一个数据类中收集所有这些参数。此外,请求参数必须用逗号分隔 path?参数=1,2 保持向后兼容性。 假设我们有这个端点: @GetMapping("path") fun someFun(@RequestParam param: Set<Int> = emptySet() ...other 11 params ) 当我调用path?param=1,2时,我得到: “错误”:“未能将java.lang.String[
path?参数=1,2
保持向后兼容性。
假设我们有这个端点:
@GetMapping("path")
fun someFun(@RequestParam param: Set<Int> = emptySet()
...other 11 params
)
当我调用path?param=1,2时,我得到:
“错误”:“未能将java.lang.String[]类型的值转换为所需的java.util.Set类型;嵌套异常为java.lang.NumberFormatException:对于输入字符串:“1,2”“,
“字段”:“参数”,
“拒绝值”:“1,2”
当我调用path?param=1¶m=2
时,一切正常当使用Java编写ClusteredParams类时,此问题不存在
public class ClusteredParams {
private Set<Int> param;
...other 11 params
getters and setters
}
公共类ClusteredParams{
私有集参数;
…其他11个参数
接球手和接球手
}
我不知道答案,但我比较了什么时候有效:
在Java中:
您可以调用?path=1,2
和?path=1&path=2
,无论您的请求参数是使用控制器方法签名内的@RequestParam path:List
声明的,还是用于对控制器方法的所有请求参数进行分组的外部对象字段
在科特林:
如果您在控制器方法签名中声明您的请求参数,作为@RequestParam path:List
或其他任何形式,您可以使用这两种方法调用它,因此:
?路径=1,2和?路径=1和路径=2
但是,如果您将其提取为单独的数据类,然后期望在控制器方法中填充此类,则只能执行?path=1&path=2,因为在?path=1,2的情况下,您会得到:
org.springframework.validation.BindException,因为它试图解析整个“1,2”,而不是首先拆分它
我希望现在更清楚了,有人知道为什么会发生这种情况吗?而不是
val
在数据类主体中使用var
:
data class ClusteredParams(
...other 11 params
) {
var param: Set<Int> = emptySet()
}
数据类ClusteredParams(
…其他11个参数
) {
var param:Set=emptySet()
}
ClusteredParams在Java中是什么样子的?试着用括号括起来path?param=[1,2]
Tryparam=1¶m=2
你们读过这篇文章吗?他需要实现的是path?param=1,2,因为这在Java中是可能的。@SimonMartinelli添加了代码示例
public class ClusteredParams {
private Set<Int> param;
...other 11 params
getters and setters
}
data class ClusteredParams(
...other 11 params
) {
var param: Set<Int> = emptySet()
}