2015-08-27 182 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描述。