2008-09-11 3 views
0

Was könnte die beste Strategie zum Spring gebaut Validierungsschicht für Mid-Enterprise-Level-Business-Anwendung für das Schreiben von 2,5Validation Framework für App-Geschäft auf Frühling gebaut 2,5

Ich weiß, dass Frühling Anlage bietet, wo wir Validator-Schnittstelle implementieren und schreiben können Validierungslogik in der Validierungsmethode. Dies wird jedoch nur auf Web-Anfragen beschränkt, die über den Federcontroller kommen.

Ich möchte das Validierungs-Framework entwickeln, das bei Web-Service-Anrufen verwendet werden kann.

Mit anderen Worten, das Framework kann bleiben und unabhängig aufgerufen werden, ohne dass die Validator-Schnittstelle implementiert werden muss, und dann kann es automatisch in Spring MVC flow integriert werden.

Hoffen Sie, dass Sie meinen Standpunkt verstehen.

Antwort

1

Das Spring Validation-Framework kann außerhalb von Spring MVC verwendet werden. Welchen WebServices Stack benutzen Sie? Wenn Sie Frühlings-WS (Spring Web Services Stack) verwenden sie spezielle Anweisungen, wie hier den Validator einzurichten:

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

Wenn Sie einen anderen Stapel verwenden, ist es wahrscheinlich einfacher, etwas zu implementieren für diesen Stapel (oder einen finden), der das Validierungsframework von Spring verwenden wird.

0

erinnert, dass die Validator-Schnittstelle definiert zwei Methoden:

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

Die Object target ist das Formular-Objekt, das das gesamte Objekt ist die Seite darstellt den Benutzer angezeigt werden. Die Errors-Instanz enthält die Fehler, die dem Benutzer angezeigt werden.

Sie müssen also einen Intermediär definieren, der mit den Details in Ihrem Formular aufgerufen werden kann, die Sie validieren möchten, die auch in Ihrem Webdienst identisch sind. Der Vermittler kann eine von zwei Formen annehmen:

  1. (wahrscheinlich das beste):

    public interface ErrorReturning { 
        public void getErrors(Errors errors); 
    } 
    
  2. (dies wirklich schnell hässlich bekommen können, wenn mehr als zwei Zustände hinzugefügt werden):

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

Ich würde vorschlagen, dass der erste Ansatz implementiert werden. Übergeben Sie mit Ihrer allgemeinen Überprüfung ein Objekt, das für die Webdienstüberprüfung direkt verwendet werden kann, lassen Sie es jedoch die Methode getErrors() implementieren. Auf diese Weise, in dem Validator für Spring, in Ihrer Validierungsmethode können Sie rufen Sie einfach an:

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

Ihr Web-Service rund um Anrufe zu getCommonValidator().validate(partialObject) beruhen würde für ein direktes Objekt im Web-Service verwendet werden. Der zweite Ansatz ist wie folgt, obwohl die Schnittstelle nur die Rückgabe eines Objekts aus dem gegebenen Objekt für ein Web-Service-Validierungsobjekt erlaubt, anstatt dass das Objekt an und für sich ein verwendbares Web-Service-Validierungsobjekt ist.