在Spring应用程序的RestController
组件中,我具有需要嵌套对象作为参数的函数。
这是代码
@RestController
class AdController {
@GetMapping(path = ["/hi"])
fun sayHello(userRequest: UserRequest): String {
return "Hello ${userRequest.name} - ${userRequest.nested!!.nestedValue}"
}
}
data class UserRequest(val name: String, val nested: NestedObject)
data class NestedObject(var nestedValue: String)
客户端调用此API,并将所有参数作为查询字符串传递
curl localhost:8080/hi\?name=Tom&nested.nestedValue=Berlin
Spring应该足够聪明,可以反序列化两个嵌套对象,但是似乎有一些麻烦。因为答案是:
Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Parameter specified as non-null is null
要使其正常工作,我必须放弃使用nice&save Kotlin语法,并使所有内容nullable
。
class UserRequest {
var name: String? = null
var nested: NestedObject? = null
}
class NestedObject {
var nestedValue: String? = null
}
以这种方式工作,但是我宁愿在模型上具有更明确的可空性。
答案 0 :(得分:0)
问题是请求方法,在这种情况下使用GET是一种不好的做法,我建议使用带有POST
的{{1}}方法来反序列化对象
request body