我刚刚开始使用kotlin与Spring Boot一起开发一个简单的Web应用程序。
我们来看一个简单的数据类对象
@Entity
data class User (name: String) {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
var id: Long = -1
}
和控制器
@RequestMapping(method = arrayOf(RequestMethod.POST))
fun createUser (@RequestBody user: User): User {
return userService.createUser(user)
}
好吧,向任何请求主体发出请求只会抛出一个http 400错误no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?); nested exception is com.fasterxml.jackson.databind.JsonMappingException
为了消除这个错误,我发现我们需要给构造函数参数赋予一些默认值,这样:
name: String = ""
或者可能:
name: String? = null
现在,绝对没有验证响应体上的输入,这意味着,如果其中存在的JSON不遵守User类的语法,则将使用默认值并将其存储在数据库中。
有没有办法验证请求体JSON输入如果它不符合User类参数而不必手动执行就抛出错误请求?
在这个例子中只有一个参数,但手动更大的类似乎不是一个好方法
提前致谢
是的,有一些方法可以“自动”验证请求正文JSON。
JSON Schema就是其中之一,并且有几个实现。 Spring Data Rest包括它,所以这可能是你的第一选择,因为Spring Boot包装得非常好。