Validation d'une liste d'objets au printemps
J'ai le contrôleur suivant la méthode:
@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 est définie de cette manière:
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;
}
...
}
Le problème est que la validation n'est pas déclenché, le CompanyTag liste n'est pas validée, le "StringUUIDValidation" validateur n'est jamais appelée.
Si je supprime la Liste, et essayez d'envoyer un seul CompanyTag, c'est à dire au lieu de:
@RequestBody @Valid List<CompanyTag> categories,
utilisation:
@RequestBody @Valid CompanyTag category,
qu'il fonctionne comme prévu, donc, apparemment, le Printemps n'aime pas à valider des listes de choses (essayé avec un tableau au lieu de cela, cela ne fonctionne pas non plus).
Quelqu'un a une idée de ce qu'il manque?
source d'informationauteur TheZuck | 2015-01-26
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une autre méthode qui fonctionne. Le problème de base est que vous voulez avoir une liste comme entrée, la charge utile de votre service, mais javax.la validation de ne pas valider une liste, seulement un JavaBean. L'astuce consiste à utiliser une liste personnalisée de classe qui fonctionne comme une Liste et un JavaBean:
Changement:
Votre liste de sous-classe ressemblerait à quelque chose comme ceci:
Je dirais pour envelopper votre Liste de catégories dans certains DTO de haricots et de les valider. À côté du travail de validation, vous bénéficierez de plus d'API flexible.
Je pense que la solution la plus élégante est de créer un Validateur personnalisé pour la Collecte et @ControllerAdvice que les registres du programme de validation dans le WebDataBinders, jetez un oeil à Printemps de validation pour RequestBody paramètres liés aux collections dans les méthodes de Contrôleur
De la validation d'une collection ne fonctionne pas directement.
Par exemple: que doit-elle faire si plusieurs éléments échec de la validation? Arrêt après la première validation? Valider tous (si oui que faut-il faire avec la collection de messages)?
Si dans votre configuration Printemps délégués à un Haricot Validateur fournisseur comme Hibernate Validator, vous devriez rechercher les moyens de mettre en œuvre une collection du programme de validation.
Pour Hibernate, un problème similaire est discuté ici