微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

依赖注入 – Guice Jersey:实体的自定义序列化

我浏览了stackoverflow和web的其余部分以获取示例,但我找不到任何超出 JSON和XML序列化的内容.

在我的webapp中,我希望将我的实体序列化为CSV.

我理解在Jersey中,我可以实现实现MessageBodyWriter和MessageBodyReader接口的提供者(或者这些类是否可以扩展?)然后让Jersey扫描包并查找并使用这些自定义实现.我怎么用Guice,使用JerseyServletModule做到这一点?

一个jax-rs框架很好地与guice集成了吗?

谢谢!

解决方法

您可以将绑定添加到您的实现中,而不是扫描包
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,Annotation annotations[],MediaType mediaType) {
        return -1;
    }

    @Override
    public void writeto(Foo data,MediaType mediaType,MultivaluedMap<String,Object> headers,OutputStream out) throws IOException {
      // Serialize CSV to out here
    }

}

然后在服务中有一些@Produces(“text / csv”)的方法.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐