ResponseEntity实现下载xml文件
说明:使用dom4j实现生成xml串
上代码:
修改前controller
public ResponseEntity<byte[]> export(){
//exportdemo()是生成xml串的方法,用dom4j的类接收
Document doc=exportdemo();
//用字节数组接收一下
byte[] content=doc.asXML().getByte();
//设置响应头
HttpHeaders headers=new HttpHeaders();
header.add("Content-Disposition","attchement;filename=demo.xml");
//设置响应码
HttpStratus StatusCode=HttpStatus.OK;
//封装数据
ResposeEntity<byte[]> entity=new ResponseEntity<byte[]>(body,headers,statusCode);
return entity;
}
这样写了之后下载是成功了,文本里的内容也没有什么问题,没有出现乱码,但是打开xml文件就会报错,定位了一下,是因为xml的值里面包含中文。但是头是<?xml version="1.0" encoding="utf-8" ?>
utf-8应该是没有问题的
百度了一下说把文本的头里面的encoding改成"gb2312"就可以,尝试了一下确实可以了,但是dom4j是改不了头的,这时打开文本另存为发现,他的字符集是默认的ANSI,如图:
在网上找了很多办法都没有把这个默认编码给改了,网上大都是用的io的字符流,处理的这种文本
最后请教大佬,大佬给我加了一个字符串:
public ResponseEntity<byte[]> export(){
//exportdemo()是生成xml串的方法,用dom4j的类接收
Document doc=exportdemo();
//用字节数组接收一下,这里加上了utf-8
byte[] content=doc.asXML().getByte("UTF-8");
//设置响应头
HttpHeaders headers=new HttpHeaders();
header.add("Content-Disposition","attchement;filename=demo.xml");
//设置响应码
HttpStratus StatusCode=HttpStatus.OK;
//封装数据
ResposeEntity<byte[]> entity=new ResponseEntity<byte[]>(body,headers,statusCode);
return entity;
}
顿时就解决了问题,希望各位不要像我一样因为这种细节浪费这么多时间