【问题标题】:Guice + Jersey: custom serialization of entitiesGuice + Jersey:实体的自定义序列化
【发布时间】:2012-06-28 07:14:05
【问题描述】:

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

例如,在我的 web 应用程序中,我希望将我的实体序列化为 CSV。

我知道在 Jersey 中我可以实现实现 MessageBodyWriter 和 MessageBodyReader 接口的提供程序(或者这些类要扩展吗?无论如何),然后让 Jersey 扫描包并查找和使用这些自定义实现。我如何使用 JerseyServletModule 使用 Guice 来做到这一点?

另一个 jax-rs 框架是否很好地与 guice 集成?

谢谢!

【问题讨论】:

    标签: dependency-injection jersey jax-rs guice


    【解决方案1】:

    您应该能够将绑定添加到您的实现中,而不是扫描包 消息体编写器。例如:

    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
        }
    
    }
    

    然后在 Service 中有一些 @Produces("text/csv") 的方法。

    【讨论】:

    • 不要忘记将类注释为“@Singleton”——这给我带来了一些麻烦。
    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2016-09-17
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2015-06-16
    相关资源
    最近更新 更多