Spring Boot,在反序列化之前验证 JSON

Spring boot, validate JSON before deserialization

提问人:Rtransat 提问时间:8/9/2023 更新时间:8/9/2023 访问量:74

问:

我正在尝试在使用 kotlin 和 spring boot 反序列化之前验证 JSON POST 数据。

我有这个控制器:

package fr.rtransat.tvtracker.api.controllers.actor

import fr.rtransat.tvtracker.api.requests.CreateActorRequest
import fr.rtransat.tvtracker.domain.actor.command.CreateActor
import fr.rtransat.tvtracker.domain.actor.command.CreateActorCommand
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController

@RestController
class CreateActorController(
    private val command: CreateActor
): AbstractActorController() {
    @PostMapping
    fun invoke(@RequestBody body: CreateActorRequest) {
        command.handle(CreateActorCommand(body.name, body.isActive))
    }
}
package fr.rtransat.tvtracker.api.requests

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class CreateActorRequest(
    val name: String,
    @SerialName("is_active")
    val isActive: Boolean
)

我使用 kotlinx.serialization,但是当我的 json 中缺少一个字段时,我遇到了以下错误: ,Could not read kotlinx.serialization.json.Json$Default@45bb062f: Field 'name' is required for type with serial name 'fr.rtransat.tvtracker.api.requests.CreateActorRequest', but it was missing at path: $

我想知道如何避免此异常并使用包含自定义错误的 json 响应处理错误。即使设置了所有字段,我也想使用非空字符串验证器验证名称 但我认为我不能在反序列化之前验证数据,对吧?所以我需要在之前验证json?(例如,也许使用 OpenAPI 模式? 我想要 json 响应而不是任何异常,因为对我来说,验证错误不是错误,所以我不需要有异常。

json spring-boot kotlin 验证 反序列化

评论


答: 暂无答案