反序列化springMVC中嵌套的Kotlin对象
我试图将一个复杂的GET请求反序列化为嵌套对象的结构 GET请求如下所示:反序列化springMVC中嵌套的Kotlin对象,spring,spring-mvc,kotlin,Spring,Spring Mvc,Kotlin,我试图将一个复杂的GET请求反序列化为嵌套对象的结构 GET请求如下所示: curl 'localhost:8080/?id=1&inner.id=1' 代码应该是这样的: 类RootObj(val id:Int,inner:InnerObject) 类InnerObject(值id:Int) @RestController 类搜索控制器{ @GetMapping(路径=[“/”]) fun getRoot(rootObj:rootObj):字符串{ 返回“ok” } } 我想这不是
curl 'localhost:8080/?id=1&inner.id=1'
代码应该是这样的:
类RootObj(val id:Int,inner:InnerObject)
类InnerObject(值id:Int)
@RestController
类搜索控制器{
@GetMapping(路径=[“/”])
fun getRoot(rootObj:rootObj):字符串{
返回“ok”
}
}
我想这不是开箱即用的,因为spring不知道如何正确地创建这个嵌套结构
Parameter specified as non-null is null: [...] parameter inner","path":"/"}%
有没有办法克服这个问题?也许提供一个完全定制的反序列化程序代码
作为替代解决方案,我想我可以展平对象层次结构,但要做到这一点,我必须能够将像
inner.id
这样的查询参数映射到名为innerId的字段,Spring实际上可以将查询参数直接映射到自定义对象,但是您需要为自定义对象构造函数的参数提供默认值
因此,您需要如下定义您的类,以使其正常工作
class RootObj(val id: Int = 0, val inner: InnerObject = InnerObject(0))
class InnerObject(var id: Int = 0)
请注意,InnerObject
的id
字段必须声明为var
,Spring才能映射它。然后,curl'localhost:8080/?id=1&internal.id=1'
就可以了。谢谢,默认参数是一个很好的建议。当然,最好能够保持参数的正确不变性。。。