基于Spring+JPA+Swagger的项目(3)
基于XML解析文件,获取变量信息
-
目前XML解析常用的技术
1.DOM:耗资源,适合多次访问XML
2.SAX:适合数据量较大的XML
3.JDOM:只使用具体类而不使用接口
4.DOM4J:优秀 -
实际项目中使用的是w3c.DOM,主要考虑到周围都在用这个
使用W3C.DOM解析XML
- 首先创建解析器工厂类
DocumentBuilderFactory
- 然后根据工厂类创建解析器
DocumentBuilder
- 使用解析器,直接解析
File
对象,获得文档模型Document
Document
就已经是一个XML树结构了- 一般操作的话,直接通过
getElementbyTagName()
获取一个Node列表,直接强制类型转换为Element - 对于Element,可以getAttributes()获取其属性列表,也是按照Node的格式,需要.item()去定位,时候使用getNodeName和getNodeValue获取键值对
Document其他属性
节点列表类NodeList
NodeList代表了一个包含一个或者多个Node的列表,根据操作可以将其简化的看做为数组
节点类Node
Node对象是DOM中最基本的对象,代表了文档树中的抽象节点。但在实际使用中很少会直接使用Node对象,而是使用Node对象的子对象Element,Attr,Text等
元素类Element
是Node类最主要的子对象,在元素中可以包含属性,因而Element中有存取其属性的方法
7.属性类Attr
代表某个元素的属性,虽然Attr继承自Node接口,但因为Attr是包含在Element中的,但并不能将其看做是Element的子对象,因为Attr并不是DOM树的一部分
业务逻辑设计
- 考虑到是树形结构,并且有嵌套的成员,因此采用递归的方式,从子节点中搜索同一变量,解析其属性存入实体类,最后调用DAO层完成数据的插入
- 目前的设计还有缺陷,只是在Controller调用
ParseAndInsert()
函数,这个Service层的函数,完成了全部数据的解析和插入,到时候关于异常的抛出肯定要重新优化
解决的bug
-
在JPA中的自动配置中,会根据你实体类中的变量名,猜测你的数据库中的column,但是当它猜错了,就出问题了.
-
如果你采用了自动建表,也就是JPA设置为
auto
,它会把它新建的表插入到你的数据库中,在插入数据时就会忽视你的表,如果恰好它修改的变量是主键,那就根本跑不起来 -
在关掉自动建表后,JPA设置为
none
,它会提醒你Field出现问题,在CSDN上搜索都是你的主键没有自增什么的,但是跟你的问题完全没有关系. -
解决办法
在yml文件下这样设置:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
这样就不会把UserVariable自动设置为User_Variable,问题解决.
Postman的使用
- 通过Postman测试后端非常的方便
- 可以传Json,时间戳,以及file格式文件
- 时间戳,需要设计相关的前端函数
- Json和file直接选传送类型即可