本发明涉及软件开发研究领域,具体涉及一种基于jsonpath和spring容器数据处理的方法。
背景技术:
1、随着互联网的普及和发展,java语言因其简单、面向对象编程思想、平台无关系等特点,成为了最流行的编程语言之一。json(javascript object notation)在现代应用程序中广泛使用,jsonpath是一种功能强大的查询语言,可以通过简单的表达式来快速准确地定位和提取json数据。spring框架由于其ioc(依赖注入)和aop(面向切面)的特点,极大的简化了企业级应用的开发,成为了最热门的java开发框架,大量的应用基于spring框架完成开发。对于一个数据处理应用系统而言,需要提取各种结构的数据并进行转换存储,如果针对每一个数据来源都进行单独处理,那工作量是巨大的,并且有很多重复开发工作。
2、数据处理应用系统,为了提取各种各样的数据并进行转换存储为目标数据格式,一般有以下两种方案。一种是传统的方式,即为每一种数据来源创建相对应结构的java实体类,用于接收源数据,并通过特定规则编码的方式获取源数据对象对应的属性值写入目标数据格式java对象的属性中。这种方案需要针对每一种数据来源创建对应的实体类,数据来源一多则对应的java类非常多,且转换成目标数据格式处理规则类似但不能够复用,过程非常繁琐且开发工作量大。二是在传统的方式基础上使用mapstruct库通过增加java对象转换注解规则进行转换,这种方案可以减少对象属性值赋值转换的代码,但是不能够减少java实体类的数量,而且这种方式属于源代码开发的形式,规则一旦发生变化需要修改源码并重新发布应用程序,不够灵活。
技术实现思路
1、为了克服现有技术的不足,本发明提供了一种基于jsonpath和spring容器数据处理的方法,接收和处理数据只需要使用通用的map或json相关的java类型即可,不需要针对不同数据格式定义不同的java类,通过配置jsonpath表达式的方式,只需写一套通用的解析代完成源数据对象属性的获取和目标数据对象属性的写入,便可以应对不同数据结构的处理,极大减少了源代码文件的数量,极大提升了开发效率。技术方案如下:
2、一种基于jsonpath和spring容器数据处理的方法,包括如下步骤:
3、步骤1,使用关系数据库存储配置项信息和数据处理结果数据,配置项信息包括以下三个配置表信息:数据来源配置表、源数据提取配置表、数据转换配置表,数据处理结果数据存储表视业务而定。
4、优选的,三个配置表具体包括以下数据:
5、数据来源配置表包含数据为数据来源编号、数据来源名称;
6、源数据提取配置表包含数据为数据来源编号、源数据属性jsonpath表达式、目标数据属性jsonpath表达式;
7、数据转换配置表包含数据为数据来源编号、源数据属性jsonpath表达式、目标数据属性jsonpath表达式,转换器bean名称、处理顺序号。
8、步骤2,引入cn.hutool:hutool-all:5.8.20的外部工具类依赖,用于jsonpath表达式相关的操作。定义一个转换器接口类converter,包含一个方法void convert(jsonsource,json target);其中json类全路径名为cn.hutool.json.json,source对象为源数据json对象,target为目标数据json对象,作为转换器的顶层抽象方法。
9、步骤3,定义一个propertiesconverter类用于提取源数据中的属性,并继承步骤2的converter抽象类,覆写converter方法,并增加@component的spring注解,将该实例对象纳入spring容器管理,此方法处理结束后,目标数据json对象target的属性为提取源数据后的数据。
10、优选的,converter方法的内部处理逻辑如下,根据源数据json对象source获取对应的数据来源编号,再根据数据来源编号到源数据提取配置表中获取所有的配置项,遍历所有配置项,依次根据jsonpath表达式配置,将源数据json对象source中对应的属性值赋值给目标数据json对象target中对应的属性。
11、步骤4,类似步骤3,根据具体业务需要定义不同的数据转换器,并继承步骤2的converter抽象类,覆写converter方法,并增加@component的spring注解,将该实例对象纳入spring容器管理,其中converter方法的内部处理逻辑根据业务需要进行不同的处理,此方法处理结束后,目标数据json对象target的属性为源数据转换后的数据。
12、步骤5,分析数据处理的需求,完善步骤1中对应的配置项信息。
13、步骤6,增加数据处理的入口,获取源数据并先经过步骤3的propertiesconverter处理器提取源数据属性,再根据对应的数据转换配置表的处理顺序号和转换器bean名称信息,依次从spring容器中获取对应bean实例,并调用对应的converter方法,所有配置的转换器处理完成后,获取最终的处理结果数据并存储,至此所有的数据处理步骤完成。
14、与现有技术相比,本发明的有益效果为:通过配置jsonpath表达式的方式,仅需要开发一次数据解析代码,针对不同结构源数据,只需分析源数据的结构并配置对应的jsonpath表达式,即可完成该数据源数据的提取和转换的开发,极大减少了相关的开发工作量和源代码文件数量,极大提升了开发效率。
15、实施方式
16、为了阐明本发明的技术方案和工作原理,下面将对本公开实施方式做进一步的详细描述。上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
17、本技术的说明书和权利要求书中的术语“步骤1”、“步骤2”、“步骤3”等类似描述是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里描述的那些以外的顺序实施。
18、本公开实施例提供了一种基于jsonpath和spring容器数据处理的方法,包括如下步骤:
19、步骤1,使用关系数据库存储配置项信息和数据处理结果数据。主要有以下三个配置表信息,数据来源配置表(主要数据列有数据来源编号、数据来源名称)、源数据提取配置表(主要数据列有数据来源编号、源数据属性jsonpath表达式、目标数据属性jsonpath表达式)、数据转换配置表(主要数据列有数据来源编号、源数据属性jsonpath表达式、目标数据属性jsonpath表达式,转换器bean名称、处理顺序号)。数据处理结果数据存储表视业务而定。
20、步骤2,引入cn.hutool:hutool-all:5.8.20的外部工具类依赖,用于jsonpath表达式相关的操作。定义一个转换器接口类converter,包含一个方法void convert(jsonsource,json target);其中json类全路径名为cn.hutool.json.json,source对象为源数据json对象,target为目标数据json对象,作为转换器的顶层抽象方法。
21、步骤3,定义一个propertiesconverter类用于提取源数据中的属性,并继承步骤2的converter抽象类,覆写converter方法,并增加@component的spring注解,将该实例对象纳入spring容器管理。其中converter方法的内部处理逻辑如下,根据源数据json对象source获取对应的数据来源编号,再根据数据来源编号到源数据提取配置表中获取所有的配置项,遍历所有配置项,依次根据jsonpath表达式配置,将源数据json对象source中对应的属性值赋值给目标数据json对象target中对应的属性。此方法处理结束后,目标数据json对象target的属性为提取源数据后的数据。
22、步骤4,类似步骤3,根据具体业务需要定义不同的数据转换器,并继承步骤2的converter抽象类,覆写converter方法,并增加@component的spring注解,将该实例对象纳入spring容器管理。其中converter方法的内部处理逻辑根据业务需要进行不同的处理。如身份证号转换处理器,根据jsonpath表达式配置,获取源数据json对象source中对应的属性的身份证号信息,根据身份证号规则计算出生日、年龄、性别等,再赋值给目标数据json对象target中对应的属性。此方法处理结束后,目标数据json对象target的属性为源数据转换后的数据。
23、步骤5,分析数据处理的需求,完善步骤1中对应的配置项信息。
24、步骤6,增加数据处理的入口,获取源数据并先经过步骤3的propertiesconverter处理器提取源数据属性,再根据对应的数据转换配置表的处理顺序号和转换器bean名称信息,依次从spring容器中获取对应bean实例,并调用对应的converter方法。所有配置的转换器处理完成后,获取最终的处理结果数据并存储,至此所有的数据处理步骤完成。
25、以上对本发明进行了示例性描述,显然,本发明具体实现并不受上述方式的限制,凡是采用了本发明的方法构思和技术方案进行的各种非实质性的改进;或者未经改进、等同替换,将本发明的上述构思和技术方案直接应用于其他场合的,均在本发明的保护范围之内。
1.一种基于jsonpath和spring容器数据处理的方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种基于jsonpath和spring容器数据处理的方法,其特征在于,三个配置表具体包括以下数据:
3.根据权利要求2所述的一种基于jsonpath和spring容器数据处理的方法,其特征在于,converter方法的内部处理逻辑如下,根据源数据json对象source获取对应的数据来源编号,再根据数据来源编号到源数据提取配置表中获取所有的配置项,遍历所有配置项,依次根据jsonpath表达式配置,将源数据json对象source中对应的属性值赋值给目标数据json对象target中对应的属性。
4.根据权利要求3所述的一种基于jsonpath和spring容器数据处理的方法,其特征在于,对于身份证号转换处理器,其对应的converter方法为根据jsonpath表达式配置,获取源数据json对象source中对应的属性的身份证号信息,根据身份证号规则计算出生日、年龄、性别,再赋值给目标数据json对象target中对应的属性。