基于Spring 2.5构建的业务应用程序的验证框架

时间:2020-03-05 18:51:43  来源:igfitidea点击:

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

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

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

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

希望你明白我的意思。

解决方案

回答

Spring验证框架可以在Spring MVC之外使用。我们正在使用什么WebServices Stack?如果我们使用的是Spring-WS(Spring的Web服务堆栈),则在此处特别说明如何设置验证器:

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

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

回答

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

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

"对象目标"是表单对象,是表示要显示给用户的页面的整个对象。 Errors实例将包含将显示给用户的错误。

因此,我们需要做的是定义一个中介,该中介可以与我们要验证的表单中的特定内容一起调用,该特定内容也与Web服务中的相同。中介可以采取以下两种形式之一:

  • (可能是最好的):
public interface ErrorReturning { 
    public void getErrors(Errors errors);
}
  • (如果添加了两个以上的状态,这可能会变得非常丑陋):
public interface ValidationObject {
    public Errors getErrors(Errors errors);
    public Object getResultOfWebServiceValidation();
}

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

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

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

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