4

例としてstackoverflowとその他のWebを参照しましたが、JSONとXMLのシリアル化を超えるものは見つかりませんでした。

たとえば、私のWebアプリでは、エンティティをCSVとしてシリアル化する必要があります。

私はJerseyで、MessageBodyWriterおよびMessageBodyReaderインターフェイスを実装するプロバイダー(またはこれらのクラスを拡張するものですか?)を実装し、Jerseyにパッケージをスキャンしてこれらのカスタム実装を見つけて使用できることを理解しています。JerseyServletModuleを使用して、Guiceでこれを行うにはどうすればよいですか?

別のjax-rsフレームワークはguiceとうまく統合されていますか?

ありがとう!

4

1 に答える 1

4

パッケージをスキャンする代わりに、バインディングを MessageBodyWriter の実装に追加できるはずです。例えば:

public class Config extends GuiceServletContextListener {

  @Override
  protected Injector getInjector() {
    return Guice.createInjector(            
        new JerseyServletModule() {
          @Override
          protected void configureServlets() {
            bind(Service.class);
            bind(CsvWriter.class);
            serve("/services/*").with(GuiceContainer.class);
          }
        });
  }

}

CsvWriter.java は次のようになります。

@Singleton
@Produces("text/csv")
@Provider
public class CsvWriter implements MessageBodyWriter<Foo> {

    @Override
    public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
        return Foo.class.isAssignableFrom(type);
    }

    @Override
    public long getSize(Foo data, Class<?> type, Type genericType, Annotation annotations[], MediaType mediaType) {
        return -1;
    }

    @Override
    public void writeTo(Foo data, 
            Class<?> type, Type genericType, Annotation[] annotations,
            MediaType mediaType, MultivaluedMap<String, Object> headers, 
            OutputStream out) throws IOException {
      // Serialize CSV to out here
    }

}

次に、サービスに @Produces("text/csv") というメソッドをいくつか用意します。

于 2012-07-02T18:52:30.900 に答える