No converter for [class com.javaweb.common.utils.JsonResult] with preset Content-Type 'application/vnd.ms-excel;charset=UTF-8'
时间: 2025-07-06 14:55:43 浏览: 16
### 解决方案
在处理 `HttpMessageNotWritableException` 错误时,核心问题是 Spring Boot 的消息转换器未能找到适合将自定义 DTO 类(如 `com.xxx.dto.Result`)序列化为指定 MIME 类型 (`application/vnd.ms-excel`) 的适配器[^1]。
对于 Excel 文件的导出操作,推荐使用更精确的内容类型来替代通用的 `application/vnd.ms-excel`。具体来说:
- 对于 `.xls` 格式的文件,应采用 `application/vnd.ms-excel`。
- 而针对 Office 2007 及以上版本支持的 `.xlsx` 文件,则建议设定内容类型为 `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`[^2]。
此外,在返回 Excel 数据流给客户端之前,除了调整 HTTP 响应头部外,还需确保数据能够被正确解析并传输。这通常涉及到配置合适的响应体格式以及可能需要引入额外依赖库辅助完成复杂对象到二进制文件的转化过程[^3]。
当通过 RESTful API 实现此类功能时,考虑到浏览器兼容性和用户体验优化方面的需求,有时还需要特别注意前后端交互方式的选择。例如,某些情况下更改前端发起请求的方式——比如修改预期接收的数据形式(`responseType`) 或者改变服务端实际发送的数据编码——可以帮助绕过特定环境下的限制或错误[^4]。
#### 示例代码片段展示如何设置控制器方法以适应上述需求:
```java
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
// 设置响应头信息
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("UTF-8");
String headerKey = "Content-Disposition";
String headerValue = "attachment; filename=example.xlsx";
response.setHeader(headerKey, headerValue);
// 创建工作簿实例,并写入输出流...
}
```
阅读全文
相关推荐











