最新要闻
- 赫德-德普官司以一百万美元赔偿和解
- 百度地图首发自研“北斗高精”技术 升级“真”车道级导航
- 【环球时快讯】中国版“猛禽”!长城山海炮大型皮卡实车现身:配自研3.0T、9AT
- 上海首张城市高级辅助驾驶地图许可来了 百度率先获批
- 环球快看点丨伊朗男子65厘米创吉尼斯最矮纪录:站起来才到到成人膝盖处
- 【世界时快讯】安卓抄错了?iPhone 15 Pro最新概念图:告别纯直边
- 当前关注:网络谣言别再传了!短视频中梅西抱的不是母亲:是阿根廷队女厨师
- 天天通讯!微软、谷歌之后 欧盟反垄断又对美国Meta下手:可罚款上百亿美元
- 每日视讯:4K游戏串流没了 NVIDIA删除使用9年的GameStream功能引用户不满
- 2022最后一跌!今起油价下调:加满一箱92号汽油少花19.5元
- 消息!苹果App Store被法国罚款100万美元:Epic CEO、扎克伯格都曾痛批
- 多次骂新能源!丰田再度质疑汽车全面电动化:中国品牌弯道超车
- 35岁本泽马宣布从法国队退役:球迷唏嘘 祝福俱乐部继续精彩
- 环球播报:北京等多地天空疑现震撼的火箭夜光云:原理科普
- 年出货3亿只、逛店必买的一次性碱性电池:被宜家正式停售了
- 环球新资讯:抖音在世界杯上下的功夫 远不止撒币10亿买版权这么简单
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球观点:Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套
(资料图片)
最近在做企微开发,遇到了一个比较复杂的xml然后要去我将xml转成实体类xml如下
1403610513 create_user 1 13800000000 1 1 0 1
为了看起来更加清晰我将这个xml转JSON 的放在下面
{ "xml": { "ToUserName": "toUser", "FromUserName": "sys", "CreateTime": "1403610513", "MsgType": "event", "Event": "change_contact", "ChangeType": "create_user", "UserID": "zhangsan", "Name": "张三", "Department": "1,2,3", "MainDepartment": "1", "IsLeaderInDept": "1,0,0", "DirectLeader": "lisi,wangwu", "Position": "产品经理", "Mobile": "13800000000", "Gender": "1", "Email": "zhangsan@gzdev.com", "BizMail": "zhangsan@qyycs2.wecom.work", "Status": "1", "Avatar": "http://wx.qlogo.cn/mmopen/ajNVd", "Alias": "zhangsan", "Telephone": "020-123456", "Address": "广州市", "ExtAttr": { "Item": [ { "Name": "爱好", "Type": "0", "Text": { "Value": "旅游" } }, { "Name": "卡号", "Type": "1", "Web": { "Title": "企业微信", "Url": "https://work.weixin.qq.com" } } ] } }}
由此我们发现企微回调的这个xml的层级比较复杂 那接下来我们将正式开始转Javabena对象
引入依赖
javax.xml.bind jaxb-api com.sun.xml.bind jaxb-core 2.3.0 com.sun.xml.bind jaxb-impl 2.3.0 org.glassfish.jaxb jaxb-runtime 2.3.0 javax.activation activation 1.1.1
根据映射关系建立实体类 并添加JAXB注解
- @XmlRootElement。这是在JAXB中使用的Object必须有的注解。它定义了XML内容的根元素。
- @XmlType。它将类映射到XML模式类型。我们可以用它来排列XML中的元素。
- @XmlTransient。这将确保Object属性不被写入XML中。
- @XmlAttribute: 这将创建Object属性作为一个属性。
- @XmlElement(name = “ABC”): 这将创建名称为 "ABC "的元素。
- @XmlElementWrapper: 注解表示生成一个包装器元素(一般用于集合元素)。我们注意到企微回调的xml层级比较复杂 那么这个实体类我们就要思考思考了我已经给你们建好了如下
import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import javax.xml.bind.annotation.*;import java.util.List;@Builder@Data@AllArgsConstructor@NoArgsConstructor@XmlRootElement(name = "xml")@XmlAccessorType(XmlAccessType.FIELD)@XmlType(propOrder = { "toUserName", "fromUserName", "createTime", "msgType", "event", "changeType", "userID", "name", "department", "mainDepartment", "isLeaderInDept", "directLeader", "position", "mobile", "gender", "email", "bizMail", "status", "avatar", "alias", "telephone", "address", "items",})public class MemberXml { @XmlElement(name = "ToUserName",required = true) private String toUserName; @XmlElement(name = "FromUserName",required = true) private String fromUserName; @XmlElement(name = "CreateTime",required = true) private String createTime; @XmlElement(name = "MsgType",required = true) private String msgType; @XmlElement(name = "Event",required = true) private String event; @XmlElement(name = "ChangeType",required = true) private String changeType; @XmlElement(name = "UserID",required = true) private String userID; @XmlElement(name = "Name",required = true) private String name; @XmlElement(name = "Department",required = true) private String department; @XmlElement(name = "MainDepartment",required = true) private String mainDepartment; @XmlElement(name = "IsLeaderInDept",required = true) private String isLeaderInDept; @XmlElement(name = "DirectLeader",required = true) private String directLeader; @XmlElement(name = "Position",required = true) private String position; @XmlElement(name = "Mobile",required = true) private String mobile; @XmlElement(name = "Gender",required = true) private String gender; @XmlElement(name = "Email",required = true) private String email; @XmlElement(name = "BizMail",required = true) private String bizMail; @XmlElement(name = "Status",required = true) private String status; @XmlElement(name = "Avatar",required = true) private String avatar; @XmlElement(name = "Alias",required = true) private String alias; @XmlElement(name = "Telephone",required = true) private String telephone; @XmlElement(name = "Address",required = true) private String address; @XmlElementWrapper(name = "ExtAttr",required = true) @XmlElement(name = "Item",required = true) private List- items;}
import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import javax.xml.bind.annotation.*;@Builder@Data@AllArgsConstructor@NoArgsConstructor@XmlRootElement(name = "Item")@XmlAccessorType(XmlAccessType.FIELD)@XmlType(propOrder ={ "type", "name", "webValue", "textValue"} )public class Item { @XmlElement(name = "Type",required = true) private String type; @XmlElement(name = "Name",required = true) private String name; @XmlElement(name = "Text",required = true) private TextValue textValue; @XmlElement(name = "Web",required = true) private WebValue webValue;}
import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import javax.xml.bind.annotation.*;@Builder@Data@AllArgsConstructor@NoArgsConstructor@XmlAccessorType(XmlAccessType.FIELD)@XmlRootElement(name = "Text")@XmlType(propOrder ={ "value"} )public class TextValue { @XmlElement(name = "Value",required = true) private String value;}
import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import javax.xml.bind.annotation.*;@Builder@Data@AllArgsConstructor@NoArgsConstructor@XmlRootElement(name = "Web")@XmlAccessorType(XmlAccessType.FIELD)@XmlType(propOrder ={ "title", "url"} )public class WebValue { @XmlElement(name = "Title",required = true) private String title; @XmlElement(name = "Url",required = true) private String url;}
创建xml和实体互转的工具类
public class JaxbUtil { /** * JavaBean转换成xml * * @param obj * @param encoding * @return */public static String convertToXml(Object obj, String encoding) {String result = null;try {JAXBContext context = JAXBContext.newInstance(obj.getClass());Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter();marshaller.marshal(obj, writer);result = writer.toString();} catch (Exception e) {e.printStackTrace();} return result;} /** * xml转换成JavaBean * * @param xml * @param c * @return */@SuppressWarnings("unchecked")public static T converyToJavaBean(String xml, Class c) {T t = null;try {JAXBContext context = JAXBContext.newInstance(c);Unmarshaller unmarshaller = context.createUnmarshaller();t = (T) unmarshaller.unmarshal(new StringReader(xml));} catch (Exception e) {e.printStackTrace();} return t;}}
测试
现在我们测试一下 将xml与实体类对象传入
打印测试结果成功
当然如果有人发现Items没有赋值成功 那就要检查实体类中的注解是否正确
比如根节点是否标记正确
-
全球观点:Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套
最近在做企微开发,遇到了一个比较复杂的xml然后要去我将xml转成实体类xml如下<xml><ToUserName><![CDAT...
来源: 全球观点:Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套
世界动态:用Python写一个一次性计算出加减乘除的运算小程序
世界热文:实验一:获取主机信息
全球播报:MySQL-InnoDB磁盘结构
今日热议:pkg对egg项目打包
天天精选!java的final关键字
环球快报:【验证码逆向专栏】某片滑块、点选验证码逆向分析
环球热议:别再用 JWT 作为 Session 系统了,问题重重,后果很危险!
全球球精选!Osx10.14升级watchman踩坑记
时讯:二分法
用Python来写个小型购物车程序
天天观速讯丨基于 Dubbo Admin 动态进行流量隔离
赫德-德普官司以一百万美元赔偿和解
百度地图首发自研“北斗高精”技术 升级“真”车道级导航
【环球时快讯】中国版“猛禽”!长城山海炮大型皮卡实车现身:配自研3.0T、9AT
上海首张城市高级辅助驾驶地图许可来了 百度率先获批
环球快看点丨伊朗男子65厘米创吉尼斯最矮纪录:站起来才到到成人膝盖处
热门:如何基于 Spring Boot 快速开发一个 Dubbo 微服务应用
【世界时快讯】安卓抄错了?iPhone 15 Pro最新概念图:告别纯直边
当前关注:网络谣言别再传了!短视频中梅西抱的不是母亲:是阿根廷队女厨师
天天通讯!微软、谷歌之后 欧盟反垄断又对美国Meta下手:可罚款上百亿美元
每日视讯:4K游戏串流没了 NVIDIA删除使用9年的GameStream功能引用户不满
2022最后一跌!今起油价下调:加满一箱92号汽油少花19.5元
消息!苹果App Store被法国罚款100万美元:Epic CEO、扎克伯格都曾痛批
多次骂新能源!丰田再度质疑汽车全面电动化:中国品牌弯道超车
35岁本泽马宣布从法国队退役:球迷唏嘘 祝福俱乐部继续精彩
Python单元测试框架unittest
环球播报:北京等多地天空疑现震撼的火箭夜光云:原理科普
年出货3亿只、逛店必买的一次性碱性电池:被宜家正式停售了
环球新资讯:抖音在世界杯上下的功夫 远不止撒币10亿买版权这么简单
差评如潮!《三体》动画评分暴跌至6.4:网友"口吐芬芳"
快讯:Epic与美国FTC和解:36.6亿元摆平两起官司
Spring IOC官方文档学习笔记(二)之Bean概述
焦点观察:FreeSWITCH学习笔记:通道变量
焦点关注:32开书本大小!华硕新款12代酷睿i7迷你机PC发布:零噪音
环球即时:内蒙古上空巨大发光体划破天际 网友:像手电筒一样
192个框框的怪兽!AMD Zen4线程撕裂者7000来了
世界快报:Django框架:9、Ajax简介、基本语法、数据编码格式、携带文件数据
马斯克现身世界杯观战阿根廷对法国:赛后发出灵魂拷问
【环球播资讯】梅西夺冠穿的黑纱是什么登上热搜:官方科普涨知识 意义非凡
今日快讯:小米13 Pro 8.38mm机身塞入太多强悍功能!雷军:相当不容易
当前快播:明年初亮相 全新东风标致408X即将发布:最美法系车来了
被裁员工报仇?近60%人赞成!马斯克将卸任推特CEO 没继承者还是我掌权
今日快讯:真值200+一张票价吗?《阿凡达2》用户评分:特效很棒 剧情稀烂
观察:小姐姐最爱!小米米家首款无线直板夹上架:30秒速热 369元
环球速看:Java关键词final解读
环球视点!简单排序
全球观焦点:数据结构与算法概念
AMD/Intel CES 2023新品发布会官宣:5大CPU齐飞
《阿凡达2:水之道》若大卖 《阿丽塔:战斗天使》续作可能有戏了!
OPPO首款竖向折叠屏Find N2 Flip评测:电池不再是遗憾 媲美传统直板手机
【环球播资讯】你能接受么?微软计划推出更廉价XGP:广告是代价
确认了!小米13系列没有砍掉Wi-Fi 7:将择机打开功能
安装VScode
linux设备树实现多个中断父(interrupt-parent)节点
当前观点:阿根廷夺冠 花16万现场看世界杯决赛的男子哭着说值了
热文:家长注意!2岁男童将硬币塞进电动车充电口 手被炸黑
天天最新:手工耿自制钓鱼佬智能快乐竿:外形酷似大狙 上钩主动提醒
当前头条:【活动预告】网易数帆首场低代码线上沙龙即将开启,报名从速!
全球头条:美国核聚变重要突破 “人造太阳”10年后有望实现发电 我国企业呢?
天天报道:联想USB 3.0扩展坞仅29元:4个USB接口 支持Type-C供电
环球滚动:颠覆认知的研究!人类可能在树上就学会了直立行走
天天快资讯:温和洁肤 六神茗茶植萃沐浴露:25.9元买一送一
满满维生素 乐源100%纯果汁大促:到手每瓶3块钱
全球头条:java中的代码块
天天观点:大数据 - DWD&DIM 业务数据
环球热点!springboot通过Referer防止跨站点请求伪造
天天微动态丨Tarjan算法求割点
最新快讯!腾讯游戏AI能帮医生看片了:超大尺寸扫描病理图像诊断成功验证
【天天报资讯】号称可以火星上穿的衣服全网首开:胸前一个大洞 自带呕吐袋
环球讯息:管好右手 摩托车弯道狂飙超车撞上护栏:骑手生死未卜
【全球聚看点】2022第三季度耳机手环出货量都跌了!因为苹果 手表逆势增长
国产龙鳞甲电池2023年装车量产:续航可达1000公里 安全没问题
环球最新:零基础入门 Java 后端开发,有哪些值得看的视频?
NVIDIA CES新品发布会官宣:RTX 4070 Ti、RTX 40笔记本显卡要来了
当前关注:美国侧目:俄罗斯生产首颗百分百国产通信卫星
观点:226MB你用吗?微信键盘正式版上线 张小龙:更好保护用户隐私
快报:新的全球制造中心越南、印度正崛起:想取代我们为时尚早
环球微资讯!30万级美系大SUV 福特探险者混动版曝光:电池来自比亚迪
天天热资讯!SIT-board 远程交互式白板的实现
洛谷 P6580 [Ynoi 2019] 美好的每一天~ 不连续的存在 题解
热头条丨火山引擎 DataTester 科普:A/B 实验常见名词解释
世界报道:Shell 变量知多少?
全球今头条!在Windows Linux中 安装 anaconda
讯息:无线投屏(智慧教室)
天天看热讯:二分的边界问题
Controller 层代码就该这么写,简洁又优雅!
SAP根据excel表格数据将数据导入表中
全球快看:JS中的相等性判断
半夜是指什么时间?半夜是指什么生肖?
三浴是什么意思?三浴锻炼是指哪三浴?
45号钢抗拉强度极限是多少?45号钢抗拉强度极限一览
今日看点:Redis——01 学习
每日看点!基于 Dubbo Admin 临时踢除问题服务实例
教材是什么意思?教材的作用有哪些?
受权人是什么意思?被授权人与受权人的区别是什么?
春风十里不如你结局是什么?春风十里不如你演员表
什么是环保型材料?环保型材料有哪些?
美团外卖超时怎么赔付?美团外卖超时了骑手会扣钱吗?
市政协委员相当于什么官?市政协委员有什么用?