2016-06-24 38 views
1

我把我的對象與傑克遜(註釋)編組爲JSON & XML,它的工作非常棒,但是XML存在問題。我想添加一個DTD-File.I,我搜索了一下,發現了@ XmlHeader-Annotation (org.glassfish.jersey.message.XmlHeader)添加標題:是否可以將@XmlHeader與Jackson一起使用?

@Path("resources/xml/hashtagstatistic") 
@GET 
@XmlHeader("<!DOCTYPE note SYSTEM \"test.dtd\">") 
@Produces(MediaType.APPLICATION_XML) 

public Database getStatisticAsXml(){ 
    return serviceController.getDatabase(); 
} 

但它不工作。我嘗試了與jaxb相同的標題,並將標題添加到了我的XML輸出中。但是我想使用Jackson,因爲它返回了我想要的結構(我不喜歡/想要適配器)。有沒有解決這個問題的可能性,還是有其他解決方案來處理這個問題的頭?

回答

1

是的,這是澤西島特有的註釋,所以傑克遜不會知道任何事情。我看到一些選項。您可以使用WriterInterceptor,只需自己寫頭。您可以創建一個MessageBodyWriter。但是,而不是從頭開始實現自己的,你可以只延長the one from Jackson(假設這是你當前使用)

@Provider 
public class MyJackonXmlProvier extends JacksonJaxbXMLProvider { 

    @Context 
    private ResourceInfo info; 

    @Override 
    public void writeTo(Object value, Class<?> type, Type genericType, 
         Annotation[] annotations, MediaType mediaType, 
         MultivaluedMap<String,Object> httpHeaders, 
         OutputStream entityStream) { 

     // do same thing as example above 
     super.writeTo(pass, all, arguments) 
} 

而且,任何一個你使用,只要確保與應用程序進行註冊。

+0

好的太棒了!它爲我工作:)。我從來沒有聽說過WriterInterceptors,因爲我是這個主題的新手。用簡單的outputStream.write(value.getBytes())替換writeToStream-Methode是否正確?謝謝:) – Chr3is

+0

是的,你可以做到這一點。 –

相關問題