我有 kotlin get request。 验证不起作用,可以指定星期几或多或少地验证限制
@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"
}
}
类和方法都应该是open
的(用Java术语来说 - 它们都不应该是最终的(,因为Spring代理逻辑。来自链接的文章:Spring 尝试继承你的类,因为有时你可以从@Autowired参数中请求精确的类。
默认情况下,所有类和方法在 Java 中都不是最终的。然而,默认情况下 Kotlin 类/方法是最终的,因此您需要open
关键字放在它们之前才能覆盖。