细节坑,ResponseEntity实现下载xml文件

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;
}

顿时就解决了问题,希望各位不要像我一样因为这种细节浪费这么多时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值