我使用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结构进行少量修改,则需要修改整个代码。
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对象时,它将确保价格不应该为零,价格不应大于零,并且应该为数字。如果在价格中传递了字符串,零或某些负值,则验证将失败。