Kotlin和Spring Boot请求身体验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin和Spring Boot请求身体验证相关的知识,希望对你有一定的参考价值。

我刚刚开始使用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包装得非常好。

以上是关于Kotlin和Spring Boot请求身体验证的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin Spring Boot 验证不起作用

Spring not not null验证在kotlin中抛出HttpMessageNotReadableException而不是MethodArgumentNotValidException(示例代

Kotlin Spring Boot 中的控制器验证

Kotlin Spring Boot bean 验证不起作用

带有用户和角色的 Kotlin 中的 Spring Boot 安全性

Spring Boot 简单的请求示例(包括请求体验证)