我浏览了 stackoverflow 和 Web 的其余部分以获取示例,但我找不到任何超出 JSON 和 XML 序列化的内容。
例如,在我的 webapp 中,我希望我的实体被序列化为 CSV。
我知道在 Jersey 我可以实现实现 MessageBodyWriter 和 MessageBodyReader 接口(interface)的提供程序(或者这些类要扩展吗?无论如何),然后让 Jersey 扫描一个包并找到并使用这些自定义实现。我如何使用 JerseyServletModule 使用 Guice 来做到这一点?
另一个 jax-rs 框架是否很好地与 guice 集成?
谢谢!
最佳答案
您应该能够将绑定(bind)添加到您的实现中,而不是扫描包
消息体编写器。例如:
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”)的方法。
关于dependency-injection - Guice + Jersey : custom serialization of entities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216321/