错误消息指出您正在尝试编写一个JaxbList
,但您MessageBodyWriter
的配置是编写一个 的对象CsvSerializer
。
如果您的方法返回 aJaxbList
并且您想让 Resteasy 将其转换为 CSV,您将需要一个MessageBodyWriter
处理JaxbList
.
@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 注册:
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;
}
}
- 如果您将服务作为 servlet 启动,
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
那么您需要告诉 Resteasy 自动扫描注释@Provider
,resteasy.scan
方法是在您的.resteasy.scan.providers
true
web.xml
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
- 如果您使用 Spring 来注册您的 Resteasy 资源,
org.jboss.resteasy.plugins.spring.SpringContextLoaderListener
那么您可以告诉 Spring 通过添加一个includeFilter
to来扫描它们ComponentScan
。
@ComponentScan(value = "com.foo",
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class))