Como validar um objeto JSON em java?
Uso sf.JSON library to map form data for incoming request in my web application in java.
Digamos que o pedido de entrada é ... http://localhost:8080/app/addProfile com os dados do formulário como: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"
}
Lado Do Servidor:
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
}
...
...
...
o principal problema com esta abordagem é se houver uma pequena modificação na estrutura JSON
, então todo o código precisa ser modificado.
Existe alguma api onde eu possa configurar as regras que são necessárias para validação?
2 answers
Pode usar o agente de validação Json: - https://github.com/fge/json-schema-validator
Ou pode simplesmente tentar analisar o Json usando o Google Gson e a excepção de sintaxe catch para o validar como em baixo: -
try{
JsonParser parser = new JsonParser();
parser.parse(passed_json_string);
}
catch(JsonSyntaxException jse){
System.out.println("Not a valid Json String:"+jse.getMessage());
}
Para a validação de dados genéricos, defina as regras do seu esquema Json e, em seguida, valide apenas o Json recebido contra este esquema.
No esquema você pode definir o tipo de valores que ele pode conter, intervalo, etc.
Para a geração de esquemas, você pode usar online ferramenta como: - http://jsonschema.net/#/
Você pode consultar este post, para ter uma compreensão rápida do esquema json: - http://json-schema.org/example1.html
Exemplo: -
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
}
O código acima define o preço no esquema Json, quando o objeto Json é validado contra este esquema, ele irá garantir que o preço não deve ser zero, deve ser mais do que zero e deve ser um número. Se uma string ou zero ou algum valor negativo for passado no preço, a validação falhar.
Imprime o objecto JSON usando:
Log.e("JSON OBJECT CREATED:", jsonobject.toString());
E depois usar um validador json online para validar o json.