天天看点

利用JSON-schema校验请求报文,封装转换错误信息,提示前台

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注解,编译器需要安装此插件。其余错误引入相关依赖即可

如果有什么好的想法,欢迎交流。