Spring 注释@Validated kotlin 类中不起作用,相同的 java 代码可以工作



我有 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关键字放在它们之前才能覆盖。

最新更新