我正在使用 Spring 在 Kotlin 中制作简单的应用程序,但我遇到了验证问题。
我有这个实体类:
@Entity
@Table(name = "category")
data class Category(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long?,
@field:NotNull @field:NotEmpty val name: String)
我的 Controller 功能如下:
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
fun create(@Valid @RequestBody category: Category): ResponseEntity<Category>
create
有一些代码,但这与问题无关,我的问题是请求正文验证。如果我发送一个名称字段为空的类别,则会抛出 MethodArgumentNotValidException
异常,但如果我将 null 发送到字段 name
, 抛出的异常 HttpMessageNotReadableException
反而。有谁知道是否可以将 null 传递给标有 @NotNull
的字段也扔MethodArgumentNotValidException
在 Kotlin 。
最佳答案
所以您的问题是您将名称字段指定为不可为空,默认情况下,kotlin 的 jackson 模块将检查它并抛出 HttpMessageNotReadableException
由 MissingKotlinParameterException
引起在 json 映射过程中。如果您标记 name
归档为可为空的 json 映射将通过并使用 @Valid
进入 Spring 验证阶段那么我们会得到MethodArgumentNotValidException
@Entity
@Table(name = "category")
data class Category(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long?,
@field:NotNull @field:NotEmpty val name: String?)
关于Spring not null 验证在 kotlin 中抛出 HttpMessageNotReadableException 而不是 MethodArgumentNotValidException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54797207/