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

时间:2008-09-11 18:43:20

标签: spring validation

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

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

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

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

希望你明白我的意思。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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();
    }
    
  3. 我建议实施第一种方法。通过常见验证,可以直接传递可用于Web服务验证的对象,但允许它实现getErrors()方法。这样,在您的验证器中,在验证方法中,您只需调用:

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

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

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