全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JAXB怎么实现Java对象和XML互转

JAXB是Java原生XML绑定框架,通过注解(如@XmlRootElement、@XmlElement等)标记Java类,利用JAXBContext实现对象与XML的序列化和反序列化,需无参构造器且注意JDK 11+需添加依赖。

JAXB(Java Architecture for XML Binding)是Java原生支持的XML绑定框架,能直接将Java对象与XML相互转换,无需手动解析或拼接。核心在于用注解标记类结构,再通过JAXBContext驱动序列化/反序列化。

1. 添加必要注解标记Java类

让JAXB知道如何映射字段到XML元素或属性:

  • @XmlRootElement:标注在类上,指定该类为XML根元素(必需)
  • @XmlElement:控制字段/属性在XML中作为子元素出现(可设namerequired等)
  • @XmlAttribute:将字段映射为XML属性(如
  • @XmlAccessorType(XmlAccessType.FIELD):告诉JAXB按字段(而非getter/setter)访问数据(推荐,避免冗余方法干扰)
  • @XmlTransient:忽略某个字段,不参与XML转换

示例:

public class User {
  @XmlAttribute
  private Long id;
  @XmlElement
  private String name;
  @XmlElement(name = "email_addr")
  private String email;
  @XmlTransient
  private String password;
  // 必须有无参构造器
  public User() {}
}

2. Java对象转XML(marshal)

使用JAXBContext创建Marshaller,调用marshal()输出XML:

  • 先用JAXBContext.newInstance(User.class)初始化上下文
  • 调用context.createMarshaller()获取marshaller
  • 可设置格式化(setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true))让XML换行缩进
  • 目标可以是FileOutputStreamWriterDOMResult

简单示例:

JAXBContext ctx = JAXBContext.newInstance(User.class);
Marshaller m = ctx.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(new User(1L, "张三", "zhang@example.com"), System.out);

3. XML转Java对象(unmarshal)

Unmarshaller将XML源(字符串、文件、InputStream等)还原为对象:

  • 同样从JAXBContext获取Unmarshaller
  • 支持StringReader(处理XML字符串)、FileInputStream等输入源
  • 注意:XML根元素名必须与@XmlRootElement声明的类匹配,否则抛异常

例如从字符串解析:

String xml = "李四li@example.com";
Unmarshaller u = ctx.createUnmarshaller();
User user = (User) u.unmarshal(new StringReader(xml));

4. 注意事项和常见问题

实际使用中容易踩坑的地方:

  • Java类必须有**无参构造器**(JAXB实例化时调用)
  • 字段不能是finalstatic(除非加@XmlTransient
  • 集合类型需用@XmlElement包裹,并确保泛型信息可用(建议用List而非ArrayList
  • 中文乱码?设置marshaller的setProperty(Marshaller.JAXB_ENCODING, "UTF-8")
  • JDK 11+默认移除了JAXB模块,需显式添加Maven依赖:jakarta.xml.bind:jakarta.xml.bind-api + org.glassfish.jaxb:jaxb-runtime

基本上就这些。用对注解、配好上下文、注意JDK版本兼容性,JAXB的XML互转就很稳。


# word  # java  # access  # 中文乱码  # ai  # win  # stream  # 常见问题  # 字符串解析  # java类  # red 


相关文章: 电脑免费海报制作网站推荐,招聘海报哪个网站多?  高性价比服务器租赁——企业级配置与24小时运维服务  建站之星ASP如何实现CMS高效搭建与安全管理?  江苏网站制作公司有哪些,江苏书法考级官方网站?  ,网站推广常用方法?  nginx修改上传文件大小限制的方法  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  建站之星如何快速解决建站难题?  如何通过.red域名打造高辨识度品牌网站?  寿县云建站:智能SEO优化与多行业模板快速上线指南  在线制作视频网站免费,都有哪些好的动漫网站?  建站之星北京办公室:智能建站系统与小程序生成方案解析  建站之星安装后界面空白如何解决?  如何通过虚拟主机快速完成网站搭建?  如何快速打造个性化非模板自助建站?  高防服务器:AI智能防御DDoS攻击与数据安全保障  测试制作网站有哪些,测试性取向的权威测试或者网站?  如何选择适合PHP云建站的开源框架?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  宝塔建站后网页无法访问如何解决?  行程制作网站有哪些,第三方机票电子行程单怎么开?  建站主机是否属于云主机类型?  如何用VPS主机快速搭建个人网站?  如何快速生成专业多端适配建站电话?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  C#怎么使用委托和事件 C# delegate与event编程方法  如何高效生成建站之星成品网站源码?  ,有什么在线背英语单词效率比较高的网站?  宝塔建站助手安装配置与建站模板使用全流程解析  在线教育网站制作平台,山西立德教育官网?  如何用美橙互联一键搭建多站合一网站?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  网站图片在线制作软件,怎么在图片上做链接?  安徽网站建设与外贸建站服务专业定制方案  长沙做网站要多少钱,长沙国安网络怎么样?  如何通过cPanel快速搭建网站?  建站主机是否等同于虚拟主机?  平台云上自助建站如何快速打造专业网站?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何快速辨别茅台真假?关键步骤解析  如何用y主机助手快速搭建网站?  建站org新手必看:2024最新搭建流程与模板选择技巧  营销式网站制作方案,销售哪个网站招聘效果最好?  python的本地网站制作,如何创建本地站点?  如何通过西部建站助手安装IIS服务器?  如何快速搭建虚拟主机网站?新手必看指南  临沂网站制作公司有哪些,临沂第四中学官网?  如何在建站主机中优化服务器配置?  如何通过NAT技术实现内网高效建站?  如何用IIS7快速搭建并优化网站站点? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。