So möchte ich die Validierungsnachrichten ändern, die zum Validieren eines Modells über eine DropWizard-Ressource verwendet werden.Override DropWizard ConstraintViolation Nachricht
Ich verwende Java-Validierung Anmerkungen. Zum Beispiel ist hier eines der Felder, die ich überprüfen möchten:
@NotEmpty(message = "Password must not be empty.")
kann ich testen, dies funktioniert wie erwartet eine Prüfung verwendet werden.
Wenn ich DropWizard jedoch verwende, um die Überprüfung der Ressource durchzuführen, fügt sie dieser Nachricht zusätzliche Daten hinzu. Was ich sehe, ist dies - password Password must not be empty. (was null)
und ich habe den Code gefunden, das tut dies hier - https://github.com/dropwizard/dropwizard/blob/master/dropwizard-validation/src/main/java/io/dropwizard/validation/ConstraintViolations.java
Insbesondere diese Methode -
public static <T> String format(ConstraintViolation<T> v) {
if (v.getConstraintDescriptor().getAnnotation() instanceof ValidationMethod) {
final ImmutableList<Path.Node> nodes = ImmutableList.copyOf(v.getPropertyPath());
final ImmutableList<Path.Node> usefulNodes = nodes.subList(0, nodes.size() - 1);
final String msg = v.getMessage().startsWith(".") ? "%s%s" : "%s %s";
return String.format(msg,
Joiner.on('.').join(usefulNodes),
v.getMessage()).trim();
} else {
return String.format("%s %s (was %s)",
v.getPropertyPath(),
v.getMessage(),
v.getInvalidValue());
}
}
Gibt es eine Möglichkeit, dieses Verhalten zu überschreiben? Ich möchte nur die Nachricht anzeigen, die ich in der Anmerkung eingestellt habe ...
Ich mag [Lukasz Wiktor Antwort] (http://stackoverflow.com/a/30799426/1891566) besser, weil er wieder instates die andere Ausnahme Mapper, dass der erste Schritt dieser Antwort entfernt, effektiv ändert * nur der Mapper für 'ConstraintValidationException's * –