【发布时间】: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<String>(marshallerEx(tickets), HttpStatus.OK);