gpt4 book ai didi

spring - 验证器不适用于 Kotlin Spring Boot 应用程序

转载 作者:行者123 更新时间:2023-12-05 04:35:52 24 4
gpt4 key购买 nike

问题

Kotlin Spring Boot Web 项目的验证注解似乎在运行时未被引用。

@Min(18)
val age: Int? = null

预期结果

如果不满足指定的验证条件,注释字段应抛出错误。

网上有很多关于类似问题的问题,但答案似乎并没有解决这个问题。

建议通常对注释使用“get”或“field”——例如

@field:Min(18)
val age: Int? = null

问题重现

为了了解为什么这对 Kotlin 不起作用,我使用本教程对 Kotlin 与 Java 进行了比较:

https://spring.io/guides/gs/validating-form-input/

我在这里创建了一个 Java 应用程序:

https://github.com/lgviii/JavaSpringValidations

我在这里用 Kotlin 制作了同一个应用程序:

https://github.com/lgviii/KotlinSpringValidations

Java 应用程序会验证在端口 8080 上运行的网页中的输入,但 Kotlin 应用程序不会。所以唯一的区别似乎是语言......


问题

  1. 为什么 Java 应用程序开箱即用,而 Kotlin 却不行?
  2. Kotlin Spring Boot验证器模板工程需要添加什么得到
    验证器像在项目的 Java 版本中那样提取注释?

最佳答案

在您的 Kotlin 示例项目中,@Valid 注释的位置不正确。您使用:

personForm: @Valid PersonForm?

这是在类型上添加注释,详细描述了一种机制here .您没有注释参数本身,这是 Spring MVC 期望触发验证的内容。这是可能的,因为验证 API 的 @Valid 被定义为可在该位置使用。如果您尝试在该位置使用其他仅参数注释,如 @ModelAttribute,编译器将拒绝它。

要解决此问题,请切换到以下声明:

@Valid personForm: PersonForm?

这注释了参数,Spring MVC 触发验证,发送不适当数据的请求将按预期重定向到表单。

或者,您可以使用 Spring 的 @Validated 注释代替 JSR-303 的 @Valid。它在这种情况下基本上以相同的方式工作,但可以防止错位,因为它不能用作类型使用注释。

关于spring - 验证器不适用于 Kotlin Spring Boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70949284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com