la validation de json à l'aide de contraintes annotations ne fonctionne pas
Je suis en train de valider un json lorsque le désérialiser l'aide de contraintes d'annotations, mais il ne semble pas fonctionner. par exemple
import com.fasterxml.jackson.annotation.JsonProperty;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
public class SimpleFooRequest {
@NotNull
@JsonProperty(value = "count")
@Min(value = 100,message = "must be min 10")
private Integer count;
@NotNull
private String name;
public String getName() {return name; }
public void setName(String name) { this.name = name; }
public Integer getCount() {return count;}
public void setCount(Integer count) {this.count = count;}
}
lors de la tentative de unmarshal le json
@Test
public void testFooRequest() throws Exception
{
String fooJson = {"count":-10}
ObjectMapper mapper = new ObjectMapper()
SimpleFooRequest request = mapper.readValue(fooJson,SimpleFooRequest.class);
assert request.getCount().equals(-10);//expected fail but it pass !!!
}
il semble passer bien que je m'attendais que l'assertion échoue en raison du nombre min limitation de la valeur . J'ai aussi essayé de mettre des annotations sur les setters, mais il a obtenu les mêmes résultats
J'ai <mvc:annotation-driven />
et hibernate-validator-4.3.1.Final.jar
dans mes dépendances
Je sais que je puisse créer un validateur personnalisé mais je pensais que pour de simples validations, je peux utiliser les annotations .
que dois-je faire pour le faire fonctionner ?
OriginalL'auteur igx | 2014-11-21
Vous devez vous connecter pour publier un commentaire.
Annotations sont juste des méta-données. Ils ne sont pas les programmes qui peuvent effectuer aucune validation. Le validateur est le programme qui va utiliser les méta-données. Dans un récipient, le récipient sera de gérer le programme de validation. Dans la base de tests unitaires ou en mode standalone, vous aurez besoin pour gérer le validateur vous-même.
Cela étant dit, même un validateur ne peut pas cesser de l'objet en cours de création/peuplées (comme vous semblez affirmer dans votre test). Il a juste vérifie que la valeur est valide. Si pas, le validateur déclenche une exception et/ou une liste de certains des violations de contrainte. Soit le contenant, ou vous devez gérer quoi faire avec les exceptions et les violations.
Et autant que je sache, il n'y a pas
ObjectMapper
configuration automatique de la JSR-303 soutien, tandis que la désérialisationUne meilleure unité de test, pourrait ressembler à quelque chose comme
OriginalL'auteur Paul Samsotha
Comment au sujet de valider à la méthode setter?
Jackson appelle votre setters si il existe...
OriginalL'auteur user3027497