Ich habe die folgende Controller-Methode:Validierung einer Liste von Objekten im Frühjahr
@RequestMapping(value="/map/update", method=RequestMethod.POST, produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseEntityWrapper updateMapTheme(
HttpServletRequest request,
@RequestBody @Valid List<CompanyTag> categories,
HttpServletResponse response
) throws ResourceNotFoundException, AuthorizationException {
...
}
CompanyTag wird auf diese Weise definiert:
public class CompanyTag {
@StringUUIDValidation String key;
String value;
String color;
String icon;
Icon iconObj;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
...
}
Das Problem ist, dass die Validierung nicht ausgelöst wird, die CompanyTag Liste Wird nicht validiert, wird der Validierer "StringUUIDValidation" nie aufgerufen.
Wenn ich die Liste entfernen und versuchen, nur einen einzigen CompanyTag zu schicken, dh statt:
@RequestBody @Valid List<CompanyTag> categories,
Verwendung:
@RequestBody @Valid CompanyTag category,
es wie erwartet funktioniert, so offenbar Frühling nicht gerne Prüfe Listen von Dingen (versucht mit Array, das hat auch nicht funktioniert).
Hat jemand eine Idee, was fehlt?
Das ist, was ich getan habe (mit Generika zu machen, na ja, generisch), aber dies ist eine Umgehungslösung und ich frage mich, ob Spring, ein relativ aktives Framework, das ständig weiterentwickelt wird und verbessert, hat dieses Problem nicht bereits auf eine Weise gelöst, mit der ich nicht vertraut bin. – TheZuck
Dies ist im Grunde kein Spring-Problem, aber eine Bean-Validierung JSR-Implementierungsbeschränkung. Welches ist in diesem Fall Hibernate Validator. Und mehr darüber, wie der Name für JSR sagt, dass dies eine "Bean-Validierung" und keine "Objekt-Validierung" ist.Sie möchten eine Liste validieren, die keine Java Bean ist. Also ich denke, die Implementierung akzeptiert ein Bean-Objekt mit Getter und Setter und dann überprüft nur die Eigenschaften, aber List ist nicht der Fall. – Babl
Bitte beachten Sie, dass Sie das Format von JSON von [{}, {}] in {categories: [{}, {}]} ändern müssen. – Kacper86