我在某些字段上有一个带有休眠验证注释的类(例如@NotNull
and@Size(min = 4, max = 50)
等...)
public class MyClass {
Long id;
@NotEmpty
@Size(min = 4, max = 50)
String machineName;
@NotEmpty
@Size(min = 4, max = 50)
String humanName;
// Getters, setters, etc…
}
我还有一个用作 JSON API 的自定义控制器,以及一个在调用 API 方法时创建 MyClass 对象的 JSON 反序列化器。在我的自定义控制器中,我有一种方法可以创建该类型的新对象:
@RequestMapping(method = RequestMethod.POST)
public long createMyObject(@RequestBody @Valid MyClass newObj) {
// Create the object in the database
return newObj.getId();
}
以及另一种更新现有对象的方法
@RequestMapping(method = RequestMethod.PUT)
public void updateMyObject(@RequestBody MyClass updatedObj) {
MyClass existingObj = // Get existing obj from DB by updatedObj.getId();
// Do some secondary validation, such as making sure that a specific
// field remains unchanged compared to the existing instance
if (existingObj.getMachineName() != null &&
!existingObj.getMachineName().equals(updatedObj.getMachineName())) {
throw new CannotChangeMachineNameException();
}
else {
updatedObj.setMachineName(existingObj.getMachineName());
}
// [HERE IS WHERE I WANT THE MAGIC TO HAPPEN]
// Save updatedObj to the database
}
虽然我可以使用@Valid
in createMyObject
,但我不能使用它,updateMyObject
因为我们的 API 实现要求 machineName 保持不变 - 用户可以使用 JSON 对象调用 API,该对象要么完全排除 machineName,要么使用数据库中存在的相同值填充它。*
在将更新的对象保存到数据库之前,我想调用具有 @Valid 注释将导致被调用的相同验证器。我怎样才能找到这个验证器并使用它?