我在查找@Valid标签和正确使用方面遇到了问题 - 非常感谢任何帮助!
假设我有一个REST控制器,它对Duck执行简单的CRUD操作(我需要使用一些东西来说明!)。我们来看看创建和更新ducks。在这两种情况下,我需要传递整个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注释。因为(也许)我在这个控制器中有其他方法不接受Duck,我启用@Valid:
@InitBinder("duck")
protected void initBinder(DataBinder binder) {
binder.setValidator(new MyDuckValidator());
}
其中MyDuckValidator实现了org.springframework.validation.Validator接口。
问题是我希望在“更新的Duck”上传入的Id(主键)被验证为非Null。但是当我创建一个Duck时,对于该Id来说,它是完全有效的。这看起来像“验证101”,但我似乎无法从任何示例或文档中找到它。有谁知道一个简单的解决方案?我不介意有两个验证器并将它们连接起来。但是,我不想破坏API只是为了解决验证....