【问题标题】:String with xml not getting rendered properly带有 xml 的字符串未正确呈现
【发布时间】:2015-08-27 17:27:09
【问题描述】:

我正在使用 jaxb marshal 将 java 对象转换为 xml。我的转换方法如下所示:

protected String marshallerEx(Tickets tickets) throws JAXBException {

    JAXBContext jaxbContext = JAXBContext.newInstance(Tickets.class);
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    StringWriter sw = new StringWriter();

    // Marshal the tickets list in console
    jaxbMarshaller.marshal(tickets, sw);

    LOGGER.info("marshal -> " + sw.toString());

    return sw.toString();
}

这里的问题是当我在日志中打印它时,返回的格式正确。例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tickets>
    <ticket>
        <assignedQueueId>61</assignedQueueId>
        <category>11</category>
        <cause>0</cause>
        <createDate>2015-08-19T13:34:18-04:00</createDate>
        <customFields/>
    </ticket>
</tickets>

但是当我从我的控制器返回它以显示在屏幕上(在浏览器中)时,它显示如下:

"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<tickets>\n    <ticket>\n        <assignedQueueId>61</assignedQueueId>\n        <category>11</category>\n        <cause>0</cause>\n        <createDate>2015-08-19T13:34:18-04:00</createDate>\n        <customFields/>\n    </ticket>\n</tickets>\n"

为什么要改变格式?我需要做些什么来保持格式在屏幕上的显示方式与我在日志中的显示方式相同?

【问题讨论】:

  • 从问题中不清楚 xml 的字符串表示如何在浏览器中显示
  • @AlexErohin:我将相同的字符串返回给浏​​览器。我希望以与日志中显示的格式相同的格式查看它,但不知何故它完全改变了
  • 这个字符串如何在浏览器中显示?它是由 servlet 作为响应写出还是显示为 html 页面的一部分?哪个 html 组件负责显示它? (它也可能负责转义字符串字符。)
  • @AlexErohin:我将其返回为ResponseEntity&lt;String&gt;(marshallerEx(tickets), HttpStatus.OK);

标签: java xml spring jaxb


【解决方案1】:

我建议您手动将 RestController 响应的 content-type 设置为 application/xml(如果您希望浏览器呈现 xml 树)或 text/plain(如果您希望它仅显示纯文本)。这将强制执行预期的表示。

HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.set("content-type", "text/plain");
return new ResponseEntity<String>(marshallerEx(tickets), responseHeaders, HttpStatus.OK);

此外,thread 中似乎描述了类似的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多