json-chema的语法就不讲述了,可自行查阅相关文档。
需求场景:前台请求接口的报文,为防止被非法拦截,需要后台再校验一遍报文合法性,之前都是在java代码中,用java代码来判断,查阅资料找到了json-schema-validate,一些基本简单的校验可以交给它来完成。
但是校验的具体哪个字段的提示信息不能以中文提示返回给前台,所以自己写了一个解析 校验结果的方法,来将检验结果错误信息以中文形式提示给前台。不多说,上代码
我的jsonschema配置文件 放在了/src/main/resources/json目录下
所以功能都在validatejsonformat 方法中完成
第一步:读取指定的schema文件
jsonnode schema = readjsonfromfileutil.readjsonfile(jsonfilename);
第二步:将请求的json转换成jsonnode
jsonnode data = convertjsontonode(params);
第三步:调用json-schema校验方法,校验是否合法
processingreport report = factory.getvalidator().validateunchecked(schema, data);
第四步:将校验返回的结果解析,并将定义的empty_message,或者error_message 提示给前台
ps:这两个字段是自定义字段。非json-schema标准语法字段。所以检验结果中,会提示语法错误,但不影响我们使用
empty_message: 表示没有此字段,触发了required校验,会取此字段信息提示到前台
error_message: 表示不符合定义的校验规则(enum,maxlength,minlength,pattern等等),会取此字段中的中文提示
如果这两个字段为定义,则会触发
preconditions.checkargument(report.issuccess(), "请求数据格式非法");
schema样例
请求json样例
controller
controller返回的json报文格式根据业务而定
convertmessage方法说明: 此方法无法将 type: array类型的元素的错误信息以中文提示给前台。
@slf4j 注解属于是lombok注解,编译器需要安装此插件。其余错误引入相关依赖即可
如果有什么好的想法,欢迎交流。