簡體   English   中英

創建自定義提供程序並鏈接到Web服務

[英]Create custom provider and link to web service

我希望我的網絡服務產生“ text / csv”。

我已經包括了來自Apache的Maven依賴項CsvSerializerProvider。 它是提供者,並生成“ text / csv”,如下所示

@Provider
@Produces("text/csv")
public class CsvSerializerProvider implements MessageBodyWriter<CsvSerializer> {
}

現在在我的網絡服務中,我像這樣@Produces(“ text / csv”)

@Produces({MediaType.APPLICATION_XML, "text/csv"})
public class RecordREST {
}

當我使用curl嘗試擊中端點時,出現錯誤提示

Could not find MessageBodyWriter for response object of type: jaxb.JaxbList of media type: text/csv

由於它是標准格式,因此我可以很好地獲取.xml,但csv顯然未正確鏈接。 我該怎么做?

錯誤消息指出您正在嘗試編寫JaxbList ,但您的MessageBodyWriter已配置為編寫CsvSerializer對象。

如果您的方法返回一個JaxbList並且您想讓Resteasy將其轉換為CSV,則需要一個處理JaxbListMessageBodyWriter

@Provider
@Produces("text/csv")
public class CsvSerializerProvider implements MessageBodyWriter<JaxbList> {
}

理想情況下,您的Web服務上的方法將返回一個域對象Foo ,在您的情況下該域對象將用JAXB注釋進行注釋,然后您的CsvSerializerProvider如下所示:

@Provider
@Produces("text/csv")
public class CsvSerializerProvider implements MessageBodyWriter<Foo> {
}

另外,您還需要確保您的提供商已在Resteasy中注冊:

  • 如果您在JBoss AS7中運行, @Provider注釋掃描將自動進行,無需任何額外配置

  • 如果使用javax.ws.rs.core.Application的子類引導服務,則可以在Application子類中注冊提供程序。

 public class MyApplication extends Application { private Set<Object> singletons = new HashSet<Object>(); public MyApplication() { singletons.add(new MyCustomMessageBodyWriter()); singletons.add(new MyResource()); } @Override public Set<Object> getSingletons() { return singletons; } } 
  • 如果要使用org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher作為Servlet啟動服務,則需要通過設置resteasy.scanresteasy.scan.providers上下文參數來告訴Resteasy自動掃描@Provider批注。在您的web.xmltrue
 <context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param> 
  • 如果你正在使用Spring來注冊你的RestEasy的資源org.jboss.resteasy.plugins.spring.SpringContextLoaderListener那么你可以告訴Spring通過添加掃描這些includeFilterComponentScan
 @ComponentScan(value = "com.foo", includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM