这是一个相当小众的问题,但希望有人知道答案:
我有一个带有 GetMapping 的 SpringFramework RestController,它使用 javax.validation 注释进行了一些参数验证。我想使用在 application.yml 中定义的属性作为 url 参数的最大值,但是我得到编译器错误,即该变量应该是一个常量。见代码:
@RestController
@Validated
public class AssetController {
private final int maxWaitMillis;
@Autowired
public AssetController(@Value("${maxWaitMillis}") int maxWaitMillis) {
this.maxWaitMillis = maxWaitMillis;
}
@GetMapping(value = "/asset", produces = MediaType.IMAGE_JPEG_VALUE)
@ResponseBody
public ResponseEntity<byte[]> getAsset(@RequestParam
@NotBlank(message = "id should not be empty") String id,
@RequestParam(defaultValue = "100", name = "timeout-ms")
@Min(value = 0, message = "minimum timeout is 0 ms")
@Max(value = maxWaitMillis, message = "max timeout is " +
maxWaitMillis) int timeoutMs) {
...
}
应用程序.yml:
maxWaitMillis: 5000
在@Max(value = maxWaitMillis,它说 maxWaitMillis 应该是常量,因为我猜注释中的检查是在构造函数从 application.yml 获取值之前完成的。
如果我检查maxWaitMillis
构造函数或方法体中的值,它的值确实是 5000。
有谁知道是否有办法在验证注释中使用 application.yml 中的值?
谢谢!