Sf.jsonライブラリを使用して、JavaのWebアプリケーションで受信リクエストのフォームデータをマッピングします。
着信リクエストが http:// localhost:8080/app/addProfile であり、フォームデータが次のようなものであるとします。
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"
}
サーバ側 :
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
}
...
...
...
このアプローチの主な問題は、JSON
構造にわずかな変更がある場合、コード全体を変更する必要があることです。
検証に必要なルールを設定できるAPIはありますか?
Jsonバリデーターを使用できます。- https://github.com/fge/json-schema-validator
または、Google Gsonを使用してJsonを解析し、構文例外をキャッチして以下のように検証することもできます。
try{
JsonParser parser = new JsonParser();
parser.parse(passed_json_string);
}
catch(JsonSyntaxException jse){
System.out.println("Not a valid Json String:"+jse.getMessage());
}
汎用データ検証の場合、Jsonスキーマでルールを定義し、このスキーマに対して受信Jsonを検証するだけです。
スキーマでは、含めることができる値のタイプ、範囲などを定義できます。
スキーマ生成には、次のようなオンラインツールを使用できます。 http://jsonschema.net/#/
この投稿を参照して、jsonスキーマをすばやく理解することができます: http://json-schema.org/example1.html
例:-
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
}
上記のコードは、Jsonスキーマで価格を定義します。Jsonオブジェクトがこのスキーマに対して検証されると、価格がゼロではなく、ゼロより大きく、数値であることが保証されます。ストリングまたはゼロまたは何らかの負の値が価格で渡されると、検証は失敗します。
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;
}