0

为基于 Spring 2.5 的中型企业级业务应用程序编写验证层的最佳策略是什么?

我知道 Spring 提供了工具,我们可以在其中实现 Validator 接口并在 validate 方法中编写验证逻辑。但这将仅限于通过 spring 控制器传入的 web 请求。

我想开发可以在 Web 服务调用期间使用的验证框架。

换句话说,框架可以保留和独立调用,而不需要实现 Validator 接口,然后它也可以自动集成到 Spring MVC 流中。

希望你明白我的意思。

4

2 回答 2

1

Spring Validation 框架可以在 Spring MVC 之外使用。您使用的是什么 WebServices 堆栈?如果您使用的是 Spring-WS(Spring 的 Web 服务堆栈),他们有关于如何在此处设置验证器的特殊说明:

http://static.springframework.org/spring-ws/sites/1.5/reference/html/server.html#d0e2313

如果您正在使用其他堆栈,则为该堆栈(或找到一个)实现将使用 Spring 验证框架的某些东西可能更容易。

于 2008-09-11T19:37:21.793 回答
0

回想一下 Validator 接口定义了两个方法:

boolean supports(Class clazz)
void validate(Object target, Errors errors)

Object target是您的表单对象,它是代表要向用户显示的页面的整个对象。Errors 实例将包含将显示给用户的错误。

因此,您需要做的是定义一个中介,该中介可以使用您想要验证的表单中的细节调用,这些细节也与您的 Web 服务中的相同。中介可以采取以下两种形式之一:

  1. (可能是最好的):

    public interface ErrorReturning { 
        public void getErrors(Errors errors);
    }
    
  2. (如果添加了两个以上的状态,这会变得非常难看):

    public interface ValidationObject {
        public Errors getErrors(Errors errors);
        public Object getResultOfWebServiceValidation();
    }
    

我建议实施第一种方法。使用您的通用验证,传递一个可直接用于 Web 服务验证的对象,但允许它实现该getErrors()方法。这样,在您的 Spring 验证器中,在您的验证方法中,您可以简单地调用:

getCommonValidator().validate(partialObject).getErrors(errors);

您的 Web 服务将基于getCommonValidator().validate(partialObject)对要在 Web 服务中使用的直接对象的调用。

第二种方法是这样的,尽管该接口只允许从给定对象返回一个对象以用于 Web 服务验证对象,而不是该对象本身就是一个可用的 Web 服务验证对象。

于 2008-09-15T21:42:51.990 回答