Dan*_*iel 13 java spring hibernate-validator spring-validator
我在一些字段上有一个带有hibernate验证注释的类(例如@NotNull和@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…
}
Run Code Online (Sandbox Code Playgroud)
我还有一个充当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();
}
Run Code Online (Sandbox Code Playgroud)
和另一种更新现有对象的方法
@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
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以用@Valid的createMyObject,我不能使用它updateMyObject,因为我们的API实现需要计算机名保持不变-用户可以调用API以JSON对象,要么不包括计算机名完全或存在于数据库中的相同值填充它*.
在将更新的对象保存到数据库之前,我想调用具有@Valid注释的相同验证器来调用它.我怎样才能找到这个验证器并使用它?
Cor*_*han 11
没有什么说你只需要在你的控制器方法中使用@Valid.为什么不创建一个接受您注释为@Valid的参数的验证方法,然后返回相同的参数.
像这样:
public Book validateBook(@Valid Book book) {
return book;
}
Run Code Online (Sandbox Code Playgroud)
看起来另一种方法是使用Hibernate的验证包.这是它的文档.
基本上,你Validator从a 得到一个ValidationFactory,然后像这样使用验证器:
@Test
public void manufacturerIsNull() {
Car car = new Car(null, "DD-AB-123", 4);
Set<ConstraintViolation<Car>> constraintViolations =
validator.validate(car);
assertEquals(1, constraintViolations.size());
assertEquals("may not be null", constraintViolations.iterator().next().getMessage());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9314 次 |
| 最近记录: |