使用JAXBContext 设置xml节点属性

 更新时间:2021年08月10日 10:35:32   作者:Dawn_Bells  
这篇文章主要介绍了使用JAXBContext 设置xml节点属性的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

JAXBContext 设置xml节点属性

在使用JAXBContext将javaBean转化为xml时

会出现这样的需求:

<xml version="2.0">
    ....
</xml>

那么xml节点里的属性值version需要怎么设置

使用@XmlAttribute标签即可,如下代码。

@XmlRootElement(name = "Xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class RequestBean{
 
    @XmlAttribute(name = "version") //设置节点属性
    private String version; 
    private Body body;         
    @XmlElement(name = "sign")  //设置子节点
    private String sign; 
    //省略封装
}
 
@XmlRootElement(name = "Body")
@XmlAccessorType(XmlAccessType.FIELD)
public class Body{
    ...
}

最终得到的xml文件大致为:

<Xml version="2.0">
    <sign>111111</sign>
    <Body>
 <Amount>111</Amount>
 <Fee>fee</Fee>
 <PayerName>payname</PayerName>
 <AccountType>accountType</AccountType>
    </Body>
</Xml>

JAXBContext解析XML集合对象

@XmlElementWrapper 为数组元素或集合元素定义一个父节点。

如,类中有一元素为List items,若不加此注解,该元素将被映射为

    <items>...</items>
    <items>...</items>

这种形式,此注解可将这个元素进行包装,如:

    @XmlElementWrapper(name="items")
    @XmlElement(name="item")
    public List items;

将会生成这样的XML样式:

    <items>
        <item>...</item>
        <item>...</item>
    </items>

Demo如下:

实体类一(定义一个被包含的子项Item):

package org.ywzn.po; 
import javax.xml.bind.annotation.XmlAttribute; 
public class Item { 
 private String infoType; 
 private String nodeId; 
 private String resultCode; 
 private String resultString; 
 public Item() {
  super();
 }
 
 public Item(String infoType, String nodeId, String resultCode,
   String resultString) {
  super();
  this.infoType = infoType;
  this.nodeId = nodeId;
  this.resultCode = resultCode;
  this.resultString = resultString;
 }
 
 @XmlAttribute(name = "InfoType")
 public String getInfoType() {
  return infoType;
 }
 
 public void setInfoType(String infoType) {
  this.infoType = infoType;
 }
 
 public String getNodeId() {
  return nodeId;
 }
 
 public void setNodeId(String nodeId) {
  this.nodeId = nodeId;
 }
 
 public String getResultCode() {
  return resultCode;
 }
 
 public void setResultCode(String resultCode) {
  this.resultCode = resultCode;
 }
 
 public String getResultString() {
  return resultString;
 }
 
 public void setResultString(String resultString) {
  this.resultString = resultString;
 } 
}

实体类二(定义一个有List集合的实体类):

package org.ywzn.po; 
import java.util.List; 
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement
public class Message { 
 private String version; 
 private Head head; 
 private List<Item> items; 
 @XmlAttribute(name="version")
 public String getVersion() {
  return version;
 }
 
 public void setVersion(String version) {
  this.version = version;
 }
 
 @XmlElement(name="Head")
 public Head getHead() {
  return head;
 }
 
 public void setHead(Head head) {
  this.head = head;
 }
 
 public List<Item> getItems() {
  return items;
 }
 
 @XmlElementWrapper(name="Items")
 @XmlElement(name="Item")
 public void setItems(List<Item> items) {
  this.items = items;
 }  
}

测试方法:

package org.ywzn.main; 
import java.util.ArrayList;
import java.util.List; 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller; 
import org.ywzn.po.Head;
import org.ywzn.po.Item;
import org.ywzn.po.Message;
import org.ywzn.po.Parameters;
import org.ywzn.po.Room;
 
public class Java2XMLMany { 
 public static void main(String[] args) {
  // <?xml version='1.0' encoding='UTF-8' standalone='no' ?> <Message
  // version='1.0'><Header Time='2015-05-22 10:34:27' MessageType='LOGIN'
  // BusinessId='B730EB39-CEFF-4a38-B633-D8936EB8AEF7' SessionId='936'
  // /><Parameters> <items Sum='1' Offset='1' Cur='1'> <item
  // Infotype='LogUser'> <PassWord
  // >D41D8CD98F00B204E9800998ECF8427E</PassWord></item> </items>
  // </Parameters> </Message>
 
  // TODO Auto-generated method stub
  Item item = new Item("LOGIN","789", "xxx","xxx");
  List<Item> list = new ArrayList<Item>();
  list.add(item);
  Head head = new Head("2015-05-21 16:46:14", "LOGIN", "8D24CE2B-5");
  Parameters parameters = new Parameters(list);
  // Message message = new Message(head,"1.0",parameters);
  Message message = new Message();
  message.setVersion("1.0");
  message.setHead(head);
  message.setItems(list);
  try {
   JAXBContext context = JAXBContext.newInstance(Message.class);
   Marshaller createMarshaller = context.createMarshaller();
   createMarshaller
     .setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串
 
   createMarshaller.marshal(message, System.out);
  } catch (JAXBException e) {
   e.printStackTrace();
  }
 }
 
}

输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message version="1.0">
    <Head businessId="8D24CE2B-5" MessageType="LOGIN" Time="2015-05-21 16:46:14"/>
    <Items>
        <Item InfoType="LOGIN">
            <nodeId>789</nodeId>
            <resultCode>xxx</resultCode>
            <resultString>xxx</resultString>
        </Item>
    </Items>
</message>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • spring初始化源码之关键类和扩展接口详解

    spring初始化源码之关键类和扩展接口详解

    Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给Spring管理,下面这篇文章主要给大家介绍了关于spring初始化源码之关键类和扩展接口的相关资料,需要的朋友可以参考下
    2023-04-04
  • 一篇文章带你入门java变量与类型

    一篇文章带你入门java变量与类型

    这篇文章主要给大家介绍了关于Java基本知识点之变量和数据类型的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • swagger如何返回map字段注释

    swagger如何返回map字段注释

    这篇文章主要介绍了swagger如何返回map字段注释的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java模拟登录正方教务抓取成绩、课表、空教室

    Java模拟登录正方教务抓取成绩、课表、空教室

    这篇文章主要介绍了Java模拟登录正方教务抓取成绩、课表、空教室等信息,Java实现模拟登录正方教务抓取成绩、课表、空教室,通过HttpClient来模拟浏览器请求,Jsoup解析网页内容,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • 使用 Java 将 byte[] 转换为 File 对象并上传到外部服务器的方法(最新推荐)

    使用 Java 将 byte[] 转换为 File 对象并上

    本文展示了如何通过 Java 和 Spring 来处理图像文件的获取、保存和上传,通过 RestTemplate 获取字节数组并将其转换为 File 对象,可以轻松实现从远程 URL 获取文件并将其上传到外部服务器,感兴趣的朋友一起看看吧
    2025-03-03
  • java对象池管理方式common-pool2使用

    java对象池管理方式common-pool2使用

    这篇文章主要为大家介绍了java对象池common-pool2使用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Java Redis分布式锁的正确实现方式详解

    Java Redis分布式锁的正确实现方式详解

    这篇文章主要介绍了Java Redis分布式锁的正确实现方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java 常规轮询长轮询Long polling实现示例详解

    java 常规轮询长轮询Long polling实现示例详解

    这篇文章主要为大家介绍了java 常规轮询长轮询Long polling实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • hadoop中实现java网络爬虫(示例讲解)

    hadoop中实现java网络爬虫(示例讲解)

    下面小编就为大家带来一篇hadoop中实现java网络爬虫(示例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • spring-mvc/springboot使用MockMvc对controller进行测试

    spring-mvc/springboot使用MockMvc对controller进行测试

    这篇文章主要介绍了spring-mvc/springboot使用MockMvc对controller进行测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论