@XmlRootElement(name = “Policy”) //XML文件中的根标识
@XmlType(propOrder = {
“productGroup”,
“sn”,
“updateUser”,
“updateLastDate”,
}) //控制JAXB 绑定类中属性和字段的排序
public class Policy implements Serializable {
private static final long serialVersionUID = 1L;
// 产品族
private List productGroup;
// sn号
private String sn;
// 更新人员
private String updateUser;
// 最后更新时间
private String updateLastDate;
}
ProductGroup.java 类 产品族集合对应的产品与版本
package com.riemann.springbootdemo.model.objectConvertXML;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import java.io.Serializable;
/**
-
@author riemann
-
@date 2019/08/29 22:14
*/
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = “ProductGroup”)
@XmlType(propOrder = {
“product”,
“version”,
})
public class ProductGroup implements Serializable {
private static final long serialVersionUID = 1L;
// 产品
private String product;
// 版本
private String version;
}
此时给出最重要的进行Java对象和XML文件相互操作的核心代码XMLUtil.java,其中有着两种方式进行转换,一种是转换成对象和string类型的xml转换,一种是对象和xml文件进行转换。
XMLUtil.java
package com.riemann.springbootdemo.util;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.*;
/**
-
封装了XML转换成object,object转换成XML的代码
-
@author riemann
-
@date 2019/08/29 22:34
*/
public class XMLUtil {
/**
-
将对象直接转换成String类型的 XML输出
-
@param obj
-
@return
*/
public static String convertToXml(Object obj) {
// 创建输出流
StringWriter sw = new StringWriter();
try {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
// 将对象转换成输出流形式的xml
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
e.printStackTrace();
}
return sw.toString();
}
/**
-
将对象根据路径转换成xml文件
-
@param obj
-
@param path
*/
public static String convertToXml(Object obj, String path) {
FileWriter fw = null;
try {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
// 将对象转换成输出流形式的xml
// 创建输出流
fw = new FileWriter(path);
marshaller.marshal(obj, fw);
} catch (JAXBException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fw.toString();
}
/**
-
将String类型的xml转换成对象
-
@param clazz
-
@param xmlStr
-
@return
*/
public static Object convertXmlStrToObject(Class clazz, String xmlStr) {
Object xmlObject = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
// 进行将Xml转成对象的核心接口
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader sr = new StringReader(xmlStr);
xmlObject = unmarshaller.unmarshal(sr);
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlObject;
}
/**
-
将file类型的xml转换成对象
-
@param clazz
-
@param xmlPath
-
@return
*/
public static Object convertXmlFileToObject(Class clazz, String xmlPath) {
Object xmlObject = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = context.createUnmarshaller();
FileReader fr = null;
fr = new FileReader(xmlPath);
xmlObject = unmarshaller.unmarshal(fr);
} catch (JAXBException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return xmlObject;
}
}
ObjectConvertXMLController.java 控制器类
这里为了测试就不写service以及impl类了哈,项目中还是要按照该有的模式去写;这里我就在控制层测试。
package com.riemann.springbootdemo.controller;
import com.riemann.springbootdemo.model.ApiResponse;
import com.riemann.springbootdemo.model.ExportExcelData;
import com.riemann.springbootdemo.model.objectConvertXML.Policy;
import com.riemann.springbootdemo.service.impl.EmailTask;
import com.riemann.springbootdemo.util.ConstantsUtil;
import com.riemann.springbootdemo.util.XMLUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
-
@author riemann
-
@date 2019/08/29 23:05
*/
@RestController
@RequestMapping(value = “/jaxb”)
public class ObjectConvertXMLController {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/7e173c69e62710bb9da525b6ce916585.jpeg)
最后
毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节
美团面试经验
字节面试经验
菜鸟面试经验
蚂蚁金服面试经验
唯品会面试经验
因篇幅有限,图文无法详细发出
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节
美团面试经验
[外链图片转存中…(img-Nvp9XtA3-1712207012892)]
字节面试经验
[外链图片转存中…(img-QadDPKRM-1712207012892)]
菜鸟面试经验
[外链图片转存中…(img-PQSPNNuG-1712207012892)]
蚂蚁金服面试经验
[外链图片转存中…(img-R8GVF2iF-1712207012892)]
唯品会面试经验
[外链图片转存中…(img-vRpvIm3b-1712207012892)]
因篇幅有限,图文无法详细发出
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!