我浏览了stackoverflow和web的其余部分以获取示例,但我找不到任何超出 JSON和XML序列化的内容. 在我的webapp中,我希望将我的实体序列化为CSV. 我理解在Jersey中,我可以实现实现MessageBodyWriter和
在我的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, 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”)的方法.
