J'utilise la bibliothèque sf.json pour mapper les données de formulaire pour les demandes entrantes dans mon application Web en Java.
Disons que la demande entrante est http: // localhost: 8080/app/addProfile avec les données du formulaire comme:
formData: {
"name":"applicant Name",
"Age":"26",
"academics":{
"college":"80",
"inter":"67",
"matriculation":"89"
},
"skill":{
"computer":"c,c++,Java",
"maths":"limit,permutation,statistics"
},
"dateOfBirth":"09-07-1988"
}
Du côté serveur :
String requestFormData=request.getParameter("formData");
JSONObject formData = JSONObject.fromObject(requestFormData);
String name= formData.getString("name");
if(name.length>70){
//error message for length validation
}
if(!name.matches("regex for name"){
//error message for name validation
}
...
...
...
Le principal problème avec cette approche est que s'il y a une modification mineure dans la structure JSON
, alors le code entier doit être modifié.
Existe-t-il une API où je peux configurer les règles requises pour la validation?
Vous pouvez utiliser le validateur Json: - https://github.com/fge/json-schema-validator
Ou vous pouvez simplement essayer d'analyser le Json en utilisant Google Gson et d'attraper l'exception de syntaxe pour le valider comme ci-dessous: -
try{
JsonParser parser = new JsonParser();
parser.parse(passed_json_string);
}
catch(JsonSyntaxException jse){
System.out.println("Not a valid Json String:"+jse.getMessage());
}
Pour la validation des données génériques, définissez les règles dans votre schéma Json, puis validez simplement le Json entrant par rapport à ce schéma.
Dans le schéma, vous pouvez définir le type de valeurs qu'il peut contenir, la plage, etc.
Pour la génération de schéma, vous pouvez utiliser un outil en ligne comme: - http://jsonschema.net/#/
Vous pouvez vous référer à cet article, pour avoir une compréhension rapide du schéma json: - http://json-schema.org/example1.html
Exemple:-
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
}
Le code ci-dessus définit le prix dans le schéma Json, lorsque l'objet Json est validé par rapport à ce schéma, il garantit que le prix ne doit pas être nul, il doit être supérieur à zéro et il doit être un nombre. Si une chaîne ou zéro ou une valeur négative est passé dans le prix, la validation échouera.
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
*
* @param inputJosn
* @return
* @throws IOException
* @throws JsonParseException
* @throws JsonProcessingException
*/
private static boolean isJsonValid(String inputJosn) throws JsonParseException, IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
JsonFactory factory = mapper.getFactory();
JsonParser parser = factory.createParser(inputJosn);
JsonNode jsonObj = mapper.readTree(parser);
System.out.println(jsonObj.toString());
return true;
}