2015-08-27 140 views
0

我正在使用jaxb marshal将java对象转换为xml。我的转换方法是这样的: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" 

为什么它改变格式?我需要做什么才能保持格式保持在屏幕上显示,就像它在我的日志中一样?

+0

它不是来自这个问题如何XML的字符串表示得到显示在浏览器 –

+0

@AlexErohin明确:我正在返回相同的字符串返回到浏览器。我想看到它在相同的格式,如它在日志中显示,但不知何故它得到改变 – user9517536248

+0

这个字符串如何显示在浏览器中?它是由servlet写出来的,还是作为html页面的一部分显示?什么html组件负责显示它? (它也可能负责转义字符串。) –

回答

0

我建议你手动设置content-type的RestController响应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描述。