我在弄清楚 @Valid 标签和正确使用时遇到问题 - 非常感谢任何帮助!
假设我有一个 REST 控制器,它对 Duck 执行简单的 CRUD 操作(我需要用一些东西来说明!)。让我们看看创建和更新鸭子。在这两种情况下,我都需要传入整个 Duck,首先是创建它,其次是因为可以修改它的任何数据项。所以这些方法看起来像:
@RequestMapping(value = "/ducks", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Duck> createDuck(@Valid @RequestBody Duck duck) { ... }
和
@RequestMapping(value = "/ducks/{duckId}", method = RequestMethod.PUT)
@ResponseBody
public ResponseEntity<Duck> updateDuck(@Valid @RequestBody Duck duck) { ... }
我在每个参数上都插入了“@Valid”,因为我想验证每个调用。@Valid 标签在这里似乎很有吸引力,因为我可以在收到时验证整个对象,而不是在食物链的下游使用不同的 JSR 303 注释。因为(也许)我在这个控制器中有其他不带鸭子的方法,所以我启用了@Valid:
@InitBinder("duck")
protected void initBinder(DataBinder binder) {
binder.setValidator(new MyDuckValidator());
}
其中 MyDuckValidator 实现了 org.springframework.validation.Validator 接口。
问题是我希望在“更新的鸭子”上传递的 Id(主键)被验证为非 Null。但是当我创建一个 Duck 时,该 Id 为空是完全有效的。这看起来像“验证 101”,但我似乎无法从任何示例或文档中弄清楚。有谁知道一个简单的解决方案?我不介意有两个验证器并将它们连接起来。但是,我不想破坏 API 只是为了解决验证问题......