最近接触医院系统使用的HL7消息,网上找解析的办法,大部分都是手工解析的,
自己用符号拆分解析,像我这种懒人是不会用的,终于让我找到hapi框架,用起来不要太方
便,建议使用。只要模板版本对应hl7消息的版本,就能解析,而不用去担心消息里面具体
的内容,具体解析方法如下:
PipeParser pipeParser = new PipeParser();
Message message = pipeParser.parse(data);
Terser terser = new Terser(message);
String station = "PID-5-1";//这个位置表示的是姓名
String val = terser.get("/." + station );
这样这个值就取出来了,我们需要做的是什么呢,就是打开hl7编辑工具,找到对应的
值的位置即可,如果要解析整个消息怎么弄?这样一个一个取我这个懒人是不干的。
这里就用到了properties文件,把名称和位置一一对应,需要取值的时候,循环调用
取出来放到map里面,方便好用,最主要一点是,如果切换另一家医院,用的hl7消息的版本
不一样,里面的位置不一样,只需要改配置文件就行,不用动代码。
其实也没那么一帆风顺,昨天就遇到问题搞了大半夜,结果解决的时候差点被自己蠢哭,
作死如下:
解析hl7消息的时候报错:
Caused by: ca.uhn.hl7v2.validation.ValidationException: Validation failed:
Primitive value '15885311159' requires to be empty or a US phone number
很明显,电话号码那里有校验没通过,hapi2.0以后的版本都加了这个校验,然后我就下载
各种版本的hapi和框架来试,显然这种瞎猫碰死耗子肯定浪费时间又解决不了,在网上找解
决办法就找到一两篇,把校验取出来,取了半天还是没取出来,时间过去几个小时,直接撸
源码调试,原来在PipeParser初始化的时候就在上下文把校验加上去了!!
查看一下PipeParser类,里面尽然藏了这么个方法:
PipeParser pipeParser = PipeParser.getInstanceWithNoValidation();
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200414184207149.png#pic_center)
一句话就解决的事浪费这么长时间,没文化写几句大白话祭奠一下这不好用的脑子
HL7消息解析----去掉校验
最新推荐文章于 2023-08-20 23:25:19 发布