2012-03-26 10 views
0

Ich versuche eine numerische Variable in der Anfrage zu validieren, was ich versuche zu erreichen, damit dieses Feld nicht null und numerisch ist. Ich möchte verschiedene Fehler für Null- und Konvertierungsfehler gemeldet haben.Anmerkungsbasierte Anforderungsüberprüfung

ich versuchte org.springframework.format.annotation.NumberFormat zu verwenden

Warum nicht die @NumberFormat keine Standardnachrichteneigenschaft hat? Gibt es einen Grund, warum dies verpasst wurde? Ich muss es nun anpassen, da ich die Nachrichtenressourcenpakete nicht verwende.

public class AddToJobsShortListWSRequest implements Serializable { 

@NumberFormat(style = NumberFormat.Style.NUMBER) 
@NotNull(message="ASL01") 
private Long userDetailId; 

Controller

public ResponseEntity<String> handlePostRequest(String xmlRequest, String... externalIds) { 

    ResponseEntity<String> response = null; 
    Set<Enum> enums = new HashSet<Enum>(); 
    AddToJobsShortListWSRequest addToJobsShortListWSRequest = serializationDeserializationSupport.fromString(xmlRequest, AddToJobsShortListWSRequest.class); 

    if(!jsonRequestValidator.validate(AddToJobsShortListWSError.class, enums, addToJobsShortListWSRequest)) 
    { 
     response = getBadRequestErrorResponseEntity(enums); 
    } 
    else{ 
..... 
} 

Validator

private void validate(@SuppressWarnings("rawtypes") Class enumClass, Object object, @SuppressWarnings("rawtypes") Set<Enum> enums) { 
    BindException errors = new BindException(object, "object"); 

    validator.validate(object, errors); 

    @SuppressWarnings({"rawtypes"}) 
    List fieldErrors = errors.getFieldErrors(); 

    for (int i = 0; i < fieldErrors.size(); i++) { 
     if (fieldErrors.get(i) instanceof FieldError) { 
      String m = ((FieldError) fieldErrors.get(i)).getDefaultMessage(); 
      enums.add(Enum.valueOf(enumClass, m)); 
     } 
    } 
} 

Gibt es eine andere Anmerkung basierte Validierung hier anwendbar? Auch, was ist die Reihenfolge der Validierung, die man zuerst eingibt, NumberFormat, NotNull?

Vielen Dank im Voraus :)

+0

Können Sie den Code und die Fehlermeldung des Controllers posten? –

+0

möglicherweise doppelte Frage von http://stackoverflow.com/questions/149506/annotation-based-spring-bean-validierung – kandarp

Antwort

1

Es ist nicht verfehlt wurde - die Validierung nur einfacher ist, als Sie brauchen und Spring unterstützt nur als i18n Anlage Ressourcenbündel Nachricht.

Also für Ihren speziellen Fall - es könnte nicht sehr speziell für Sie - Sie benötigen eine spezielle Implementierung.

Auch gibt es keine garantierte Reihenfolge für Validierungen. Jede Validierung muss alle Fälle bewältigen, die nicht behandelt werden (die Zahlenvalidierung muss also mit Leer- und Nullwerten arbeiten, da andere Validierungen dies überprüfen).

Ich, zum einen, finde die Annotation basierte Validierung nützlich für sehr einfache hallo-Welt Art Fälle wie @NotNull oder @NotEmpty. Für alles andere bevorzuge ich commons validator plus meine eigenen Anmerkungen, weil ich so die Muster und allgemeinen Validierungen definieren kann, die ich für meine Apps benötige, und sie in einer definierten Reihenfolge ausführen kann, wenn ich muss.

+0

Sie haben Recht, ich habe gerade festgestellt, wenn das der Fall ist - Spring unterstützt nur Nachrichtenressourcen Bundles als i18n Einrichtung . also das ist, wo es anders ist als jsr-303 Danke –