Напомним, что интерфейс Validator определяет два метода:
boolean supports(Class clazz)
void validate(Object target, Errors errors)
Object target
- это объект формы, который представляет собой весь объект, представляющий страницу, которая будет показана пользователю. Экземпляр Errors будет содержать ошибки, которые будут отображаться пользователю.
Итак, вам нужно определить посредника, который может быть вызван с указанными в вашей форме особенностями, которые вы хотите проверить, и такими же, как в веб-службе. Посредник может принимать одну из двух форм:
(вероятно, лучший):
public interface ErrorReturning {
public void getErrors(Errors errors);
}
(это может быть ужасно быстро, если будет добавлено более двух состояний):
public interface ValidationObject {
public Errors getErrors(Errors errors);
public Object getResultOfWebServiceValidation();
}
Я бы предложил реализовать первый подход. При обычной проверке передайте объект, который можно напрямую использовать для проверки веб-службы, но разрешите ему реализовать метод getErrors()
. Таким образом, в вашем валидаторе для Spring, внутри вашего метода валидации вы можете просто вызвать:
getCommonValidator().validate(partialObject).getErrors(errors);
Ваш веб-сервис будет основан на вызовах getCommonValidator().validate(partialObject)
для прямого объекта, который будет использоваться в веб-сервисе.
Второй подход подобен этому, хотя интерфейс позволяет возвращать объект только из заданного объекта для объекта проверки веб-службы, а не сам по себе объект проверки пригодности веб-службы. *