エラー メッセージには、 を書き込もうとしているが、 のオブジェクトを書き込むように構成されていることが示されてJaxbListいます。MessageBodyWriterCsvSerializer
メソッドが を返し、JaxbListResteasy でそれを 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;
}
}
- サービスを でサーブレットとして開始する場合は、Resteasy
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcherに注釈を自動的にスキャンするように指示する必要が@Providerあります。resteasy.scanresteasy.scan.providerstrueweb.xml
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
- Spring を使用して Resteasy リソースを登録している場合は、 to を
org.jboss.resteasy.plugins.spring.SpringContextLoaderListener追加して Spring にそれらをスキャンするように指示できます。includeFilterComponentScan
@ComponentScan(value = "com.foo",
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class))