Spring not not null验证在kotlin中抛出HttpMessageNotReadableException而不是MethodArgumentNotValidException

问题描述 投票:1回答:1

我正在使用Spring在Kotlin中进行简单的应用,但是我在验证时遇到了问题。

我有这个实体类:

@Entity
@Table(name = "category")
data class Category(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Long?,
        @field:NotNull @field:NotEmpty val name: String)

我的控制器功能如下:

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
fun create(@Valid @RequestBody category: Category): ResponseEntity<Category>

create有一些代码,但它与问题无关,我的问题是请求正文验证。如果我发送一个带有空名称字段的类别,则抛出一个MethodArgumentNotValidException异常,但是如果我向字段name发送null,则抛出HttpMessageNotReadableException异常。有没有人知道是否有可能将null传递给标有@NotNull的字段,以便在Kotlin中抛出MethodArgumentNotValidException

spring rest validation kotlin
1个回答
0
投票

所以你的问题是你指定名称字段不可为空,默认情况下,kotlin的jackson模块将检查它并在json映射过程中抛出由HttpMessageNotReadableException引起的MissingKotlinParameterException。如果你将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?)
© www.soinside.com 2019 - 2024. All rights reserved.