Java 转换器弹簧靴

Java 转换器弹簧靴,java,spring,spring-boot,csv,Java,Spring,Spring Boot,Csv,我正在spring启动应用程序中编写一个处理程序,将对象转换为CSV。如果用户只需要标头,则只应返回CSV标头。还有两个其他选项-标题和正文以及仅正文 由于某些原因,头文件只返回空文件。为什么呢?我尝试为header_only选项添加p.println(),仍然只返回空文件 完整的代码如下:不完整,我一直在堆栈溢出中遇到这个错误“看起来你的文章大部分是代码,请添加更多细节。”因此我删除了一些与讨论主题无关的代码 public class CsvHttpMessageConverter exten

我正在spring启动应用程序中编写一个处理程序,将对象转换为CSV。如果用户只需要标头,则只应返回CSV标头。还有两个其他选项-标题和正文以及仅正文

由于某些原因,头文件只返回空文件。为什么呢?我尝试为header_only选项添加p.println(),仍然只返回空文件

完整的代码如下:不完整,我一直在堆栈溢出中遇到这个错误“看起来你的文章大部分是代码,请添加更多细节。”因此我删除了一些与讨论主题无关的代码

public class CsvHttpMessageConverter extends AbstractHttpMessageConverter<CsvResponse> {


    @Override
    protected void writeInternal(CsvResponse response, HttpOutputMessage output)
            throws IOException, HttpMessageNotWritableException {
        output.getHeaders().setContentType(MEDIA_TYPE);
        output.getHeaders().set("Content-Disposition", "attachment; filename=\"" + response.getFilename() + "\"");
        OutputStream out = output.getBody();
        writeRecords(response, out, response.getOption());
        out.close();
    }

    private void writeRecords(CsvResponse response, OutputStream out, String option) throws IOException {
        PrintWriter p = new PrintWriter(out);
        List<DynamicMarketData> list = response.getRecords();
        String header = mdhTotemConfiguration.getColumnListForCommodities();
        if (option.equals("header_only") || option.equals("header_and_body"))
        {
            p.print(header);
        }
        if (option.equals("body_only") || option.equals("header_and_body"))
        {
            for (DynamicMarketData elem : list) {   
                p.println();
                Iterator<Map.Entry<String, String>> entries = elem.getDynamicMarketData().entrySet().iterator();
                do {
                    Map.Entry<String, String> entry = entries.next();
                    p.print(entry.getValue());
                    if (entries.hasNext() == true)
                        p.print(",");
                } while (entries.hasNext());
            }
        }

    }



}
公共类CsvHttpMessageConverter扩展了AbstractHttpMessageConverter{
@凌驾
受保护的void writeInternal(CsvResponse响应,HttpOutputMessage输出)
抛出IOException、HttpMessageNotWritableException{
output.getHeaders().setContentType(媒体类型);
output.getHeaders().set(“内容处置”,“附件;文件名=\”+响应.getFilename()+”\”);
OutputStream out=output.getBody();
writeRecords(response、out、response.getOption());
out.close();
}
私有void writeRecords(CsvResponse响应、输出流输出、字符串选项)引发IOException{
PrintWriter p=新的PrintWriter(输出);
List=response.getRecords();
String header=mdhTotemConfiguration.getColumnListForCommodities();
if(option.equals(“仅标题”)| | option.equals(“标题和主体”))
{
p、 打印(页眉);
}
if(option.equals(“body_only”)| | option.equals(“header_和_body”))
{
对于(DynamicMarketData元素:列表){
p、 println();
迭代器条目=elem.getDynamicMarketData().entrySet().Iterator();
做{
Map.Entry=entries.next();
p、 打印(entry.getValue());
if(entries.hasNext()==true)
p、 打印(“,”);
}while(entries.hasNext());
}
}
}
}

您是否有错误消息?没有错误消息Harry
p.flush();p、 close()完成时。当您完成编写所有内容时(在方法退出之前)。欢迎:)是否有错误消息?没有错误消息Harry
p.flush();p、 close()完成时。当您完成编写所有内容时(在方法退出之前)。不客气:)