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