错误消息指出您正在尝试编写一个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.providerstrueweb.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 通过添加一个includeFilterto来扫描它们ComponentScan。
@ComponentScan(value = "com.foo",
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class))