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

标签 spring rest validation kotlin

我正在使用 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 模块将检查它并抛出 HttpMessageNotReadableExceptionMissingKotlinParameterException 引起在 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/

相关文章:

rest - Azure DevOps API - 如何发现字段和选项列表之间的链接

php - 计算文本区域中的行数,包括自动换行符

javascript - Jquery Validation 使用远程检查用户名

validation - yii2 关于唯一属性的更新操作

java - 使用千分尺、 Spring Boot 和普罗米修斯测量每秒请求数

java - 如何在 Spring Data rest 中返回 List<String> 或 String

java - ApacheHttpClientHandler 与 Jersey1.18 一起使用进行 POST 请求时抛出 NullPointerException

java - Jersey Restful 服务通信 (IncompatibleClassChangeError)

spring - 自定义 spring-initializr 的工作方式?

spring - 如何在 Spring Security 3.2 中有问题地设置 Access-Control-Allow-Origin 过滤器