restlet导出csv格式文件,以及restlet插件调用
来源:互联网 发布:青岛淘宝代理 编辑:程序博客网 时间:2024/05/21 19:32
如何用restlet导出csv格式文件,以及restlet插件的调用
由于业务需求,没有做成导出excel格式的,而是直接生成简平快的csv文件。
但是经过一番了解发现restlet关于csv格式的处理是有问题的。
http://stackoverflow.com/questions/24569318/writing-multi-line-csv-with-jacksonrepresentation
restlet只能把对象解析到一行上导出,要你何用。
https://github.com/restlet/restlet-framework-java/issues/928
上面的问题中有人提交了issue,但是官方已经标记为unplanned……只能自己动手了
提交issue的哥们给出的解决办法是实现一个JacksonRepresentation子类,让其覆盖createCsvSchema方法,在其中定义一个List,并指定转化的不是List,而是List中的实际需要的bean类型。
new JacksonRepresentation<List<MyBean>>(MediaType.TEXT_CSV, array) { @Override protected CsvSchema createCsvSchema(CsvMapper csvMapper) { return csvMapper.schemaFor(MyBean.class); }}但是这样有个问题,需要每次都将结果封装到这个类里返回才行,有没有办法能一劳永逸呢?
我想到的办法是继承JacksonRepresentation,和上面的方法相同,覆盖createCsvSchema方法
public class CorrectJacksonRepresentation<T> extends JacksonRepresentation<T> {private T object; public CorrectJacksonRepresentation(MediaType mediaType, T object) {super(mediaType, object);this.object = object;}@Override protected CsvSchema createCsvSchema(CsvMapper csvMapper) {if (!(object instanceof List)) {throw new IllegalArgumentException("accept java.util.List only");} else if (((List<?>)object).size() == 0) {return csvMapper.schemaFor(Object.class);} else {return csvMapper.schemaFor(((List<?>)object).get(0).getClass());} }}通过查看jackson包的源码,可以看到JacksonRepresentation是在ConverterHelper调用的,所以还需要一个继承ConverterHelper的子类来调用我们自己实现的JacksonRepresentation。
那么jackson和restlet又如何知道要用我们实现的这个ConverterHelper而不是jackson自己的呢?
可以模仿restlet插件的写法,在META-INF/services下新建org.restlet.engine.converter.ConverterHelper,然后在其中添加上自己实现的这个ConverterHelper
写一个方法测试下
@Get("csv")public List<KV> getWhat() {List<KV> result = new ArrayList<>();result.add(new KV("f43", null));result.add(new KV("f43", ""));result.add(new KV("", "34tg"));return result;}调用后成功生成了多行的csv文件。
这样以后都只需要在@Get中加入("csv")就可以轻松导出数据了。
- restlet导出csv格式文件,以及restlet插件调用
- restlet
- restlet
- Restlet
- 谷歌Restlet Client插件下载
- Restlet指南
- Restlet 指南
- restlet简介
- Restlet 第一步
- Restlet指南
- protobuf&restlet
- restlet简介
- Restlet overview
- Restlet 指南
- restlet学习心得
- Restlet学习
- restlet简介
- Restlet Introduction
- 关于cpu分段的段地址计算
- datagrid的文字换行与连续字符串换行处理,字符串三种截取方式
- 特长生模拟——侦察兵
- leetcode_reverse_integer
- Linux unit9-apache
- restlet导出csv格式文件,以及restlet插件调用
- 「敏捷开发」适合什么样的团队
- 双坐标轴
- 设计模式之桥梁(桥接)模式
- [OpenCV] cv::Mat to IplImage*
- 全国各城市代码
- typedef理解
- Maven实战(四)--坐标
- 行为型模式之访问者模式(Visitor)