java - Spring注解@Validated在kotlin类中不起作用,相同的java代码起作用
问题描述
我有 kotlin 获取请求。验证不起作用,可以或多或少地指定星期几验证限制
@RestController
@Validated
open class GetCrab {
@GetMapping("/v1/get")
open fun getNameOfDayByNumber(@RequestParam dayOfWeek: @Min(1) @Max(7) Int?): String {
return "ok"
}
}
在同一个java代码验证工作
@RestController
@Validated
public class GetCrab {
@GetMapping("/v1/get")
public String getNameOfDayByNumber(@RequestParam @Min(1) @Max(7) Integer dayOfWeek) {
return "ok";
}
}
验证工作时的 Java 代码:请求:
http://localhost:12722/v1/get?dayOfWeek=100
响应->
{
"errors": [
{
"code": "INTERNAL_SERVER_ERROR",
"details": "getNameOfDayByNumber.dayOfWeek: must be less than or equal to 7"
}
]
}
Kotlin 代码,请求http://localhost:12722/v1/get?dayOfWeek=100
回复:
ok
解决方案
请open
也为方法使用修饰符。
例如,请尝试代码:
@RestController
@Validated
open class GetCrab {
@GetMapping("/v1/get")
open fun getNameOfDayByNumber(@RequestParam dayOfWeek: @Min(1) @Max(7) Int?): String {
return "ok"
}
}
由于 Spring 代理逻辑,类和方法都应该是open
(用 Java 术语 - 它们都不应该是最终的)。来自链接的文章:Spring 尝试继承您的类,因为有时您可以从 @Autowired 参数请求准确的类。
默认情况下,Java 中的所有类和方法都不是 final 的。然而 Kotlin 类/方法默认是 final 的,所以你需要open
在它们之前加上关键字才能覆盖。
推荐阅读
- latex - BibTeX 在 Texmaker 的“构建”子目录中找不到 .aux 文件
- javascript - 来自原点“xxx”的 CORS 策略已阻止:
- emacs - 如何将参数传递给 Elisp 函数?
- c++ - 交换运算符的模板实现,合法吗?
- python - 如何定义一系列按钮并为每个按钮运行一个具有不同输入的函数 tkinter python
- java - App Engine - LocalDatastoreService 加载 - 无法从后备存储加载
- android - 我想为用户登录提供面部 id 身份验证,这样用户就不必每次都输入 id 和密码
- node.js - 运行 npm run generate 时出现 Nuxt 致命错误
- javascript - 如果页面未完全加载并且我的 webdriver 所需的等待时间已经结束,我如何获取 URL?
- javascript - 将对象的 json 数组转换为不同的格式