2016-12-02 1 views
2

Ich habe einen Exception-Mapper geschrieben, um die vom Hibernate-Validator generierte Antwort zu überschreiben, sodass ich eine gewisse Kontrolle über das in der Antwort zurückkehrende Messaging haben könnte.Hibernate-Validator: Überwinden von Einschränkungsverletzungen Messaging

Mein Problem ist, dass ich einige Schwierigkeiten habe, eine einfache Möglichkeit zu finden, "umzuschalten", basierend auf dem Typ der Constraint-Verletzung, und deshalb habe ich Probleme beim Schreiben von benutzerdefinierten Nachrichten. Im Idealfall könnte ich einen Wechsel basierend auf der Annotation durchführen und Custom Messaging in der Antwort zurückgeben. Im Idealfall würde es in etwa so aussehen:

@Override 
public Response toResponse(ConstraintViolationException exception) { 

    ConstraintViolation violation = exception.getConstraintViolations().iterator().next(); 

    String message = null; 
    switch (violation.getType()) { 
     case SomeEnum.NOT_NULL: 
      message = "It's not null!"; 
      break; 
     default: 
      message = "Other message!"; 
    } 

    ... 
} 

Ist etwas so einfach wie möglich?

+0

Das ist kein großartiger Ansatz - was ist, wenn Sie die Nachrichten internationalisieren wollen? Wenn Sie diesen Weg gehen, machen Sie die annotierte "Nachricht" zu einem Schlüssel und verwenden Sie normale Nachrichtenpakete. Sehen Sie sich die Standardeinstellungen für die Out-of-the-Box-Constraint-Annotationen an. – chrylis

+0

Ich habe bereits eine Strings-Datei für den Umgang mit der Internationalisierung. Ich vereinfachte das Beispiel, so dass es nicht der Fokus wäre. Die Sache, die mich interessiert, ist der Mechanismus, um die richtige Nachricht zu wählen, nicht wo sie abgerufen werden sollen. – Brandon

Antwort

1

ConstraintViolation#getConstraintDescriptor() sollte für Sie hilfreich sein. Unter anderem setzt der zurück Descriptor die verletzt Einschränkung Annotationstyp:

if (violation.getConstraintDescriptor().getAnnotation().annotationType() == NotNull.class) { ... } 

aber sagen, dass das Problem möglicherweise besser durch die Implementierung eines benutzerdefinierten MessageInterpolator angesprochen werden, mit dem Sie die erwartete Nachricht innerhalb des Einschränkungsverletzung sofort geben .

Verwandte Themen