[英]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,則需要一個處理JaxbList
的MessageBodyWriter
。
@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.scan
或resteasy.scan.providers
上下文參數來告訴Resteasy自動掃描@Provider
批注。在您的web.xml
為true
。 <context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param>
org.jboss.resteasy.plugins.spring.SpringContextLoaderListener
那么你可以告訴Spring通過添加掃描這些includeFilter
到ComponentScan
。 @ComponentScan(value = "com.foo", includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.