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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring not not null验证在kotlin中抛出HttpMessageNotReadableException而不是MethodArgumentNotValidException(示例代相关的知识,希望对你有一定的参考价值。

我正在使用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

答案

所以你的问题是你指定名称字段不可为空,默认情况下,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?)

以上是关于Spring not not null验证在kotlin中抛出HttpMessageNotReadableException而不是MethodArgumentNotValidException(示例代的主要内容,如果未能解决你的问题,请参考以下文章

springboot调整MybatisPlus全局的验证策略

MySQL中 IS NULLIS NOT NULL!= 能用上索引吗?

完美解决Could not process result for mapping: ResultMapping{property=‘null‘, column=‘xxx‘, javaType=

完美解决Could not process result for mapping: ResultMapping{property=‘null‘, column=‘xxx‘, javaType=

完美解决Could not process result for mapping: ResultMapping{property=‘null‘, column=‘xxx‘, javaType=

完美解决Could not process result for mapping: ResultMapping{property=‘null‘, column=‘xxx‘, javaType=