如何使用 jaxb 将 xml 字符串解组为 java 对象

Posted

技术标签:

【中文标题】如何使用 jaxb 将 xml 字符串解组为 java 对象【英文标题】:how to unmarshall xml string to java object using jaxb 【发布时间】:2018-01-06 16:00:49 【问题描述】:

我需要使用 rest 模板发送请求。在我发送之前,我需要在发送请求时将对象编组为 xml。我收到了来自请求的响应,但是是 XML 格式的。然后我需要将响应 xml 转换为 Object 以便将结果显示到界面上。

下面是我发送请求的控制器

 @RequestMapping("/searchSummon")
 public String Search(Model model)
 

    model.addAttribute("jaxbExample", new JAXBExample());
    model.addAttribute("pdxiRes", new PDXIRes());

    JAXBExample jaxbExample = new JAXBExample();
    String create_xml = jaxbExample.CreateXML();

    System.out.println(create_xml);

    RestTemplate restTemplate = new RestTemplate();
    String a = restTemplate.postForObject("http://192.168.80.30/summon-
    V2/example", "<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE PDXIReq 
    SYSTEM 'summon.dtd'>" + create_xml,String.class);

    System.out.println(a);

    return "searchSummon";

我如何解组 'a' 来反对? 响应类 PDXIRes 标题 要求 细节 状态

响应的xml('a')

 <?xml version="1.0" encoding="utf-8"?>
 <PDXIRes>
 <header>
    <sp_code>abc017637m</sp_code>
 </header>
 <request id="1sq1216272728732">
    <id_no>683642435</id_no>
    <name>SALLY</name>
    <max_index>1024</max_index>
    <total_summons>2</total_summons>
    <summons_detail>
        <row num="1">
            <summons_id>1810000200002AQ639332</summons_id>
            <vehicle>NN162</vehicle>

        </row>
        <row num="2">
            <summons_id>1810000200002AM947772</summons_id>
            <vehicle>NN162</vehicle
        </row>
    </summons_detail>
    <status>
        <status_code>01</status_code>
        <status_msg>Successful</status_msg>
    </status>
   </request>
   </PDXIRes>

【问题讨论】:

如果您使用像 Jersey 这样的 REST 框架,则编组/解组过程会自动处理... 请检查***.com/questions/25704853/…是否有帮助... 【参考方案1】:

您可以使用 Unmarshaller 来做到这一点。

JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

StringReader reader = new StringReader("xml string here");
Person person = (Person) unmarshaller.unmarshal(reader);

在这里找到:Use JAXB to create Object from XML String

【讨论】:

以上是关于如何使用 jaxb 将 xml 字符串解组为 java 对象的主要内容,如果未能解决你的问题,请参考以下文章

在将 XML 文件解组为对象后,如何让 JAXB 调用方法?

Java/JAXB:根据属性将 Xml 解组为特定子类

使用 Jaxb API 将 XML 解组为 Java 对象时获取 NullPointerException

如何跳过字段并仅使用JAXB解组该字段的特定成员?

JAXB 继承,解组到编组类的子类

在 Android 中将 XML 文件解组为 Java 对象?