gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:08:03 25 4
gpt4 key购买 nike

我有 kotlin get 请求。验证不起作用,可以指定一周中的一天或多或少验证限制

@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术语来说——它们都不应该是final的),because of Spring proxy logic 。来自链接文章:Spring 尝试继承您的类,因为有时您可以从 @Autowired 参数请求确切的类。

默认情况下所有类和方法are not final in Java 。然而 Kotlin 类/方法 are final by default ,因此您需要在它们之前放置 open 关键字才能覆盖。

关于java - Spring注释@Validated在kotlin类中不起作用,相同的java代码可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59647531/

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