No converter for [class java.util.LinkedHashMap] with preset Content-Type ‘application/vnd.ms-excel;

通常解决方案参考
https://blog.csdn.net/qq_42651201/article/details/120710224

我的报错 

org.springframework.http.converter.HttpMessageNotWritableException:
 No converter for [class com.xxx.dto.Result] with preset Content-Type 'application/vnd.ms-excel;charset=utf-8'

我的问题根因

controller处理逻辑有问题,导致报错,然后被全局异常捕捉,再然后返回了错误信息

也就是说本来没有返回值的方法,最终有返回值class com.xxx.dto.Result ,就会抛出以上错误。

我的解决方案

把controller里面的报错解决,让逻辑正常执行,不报错,不被全局异常捕捉即可

以上为我遇到的问题根因和解决方案

另外还有种情况 也可能会报以上错误,就是表格列的  index的值重复

@ExcelProperty(value = "字段", index = 0)

以下是具体的分析步骤,可看,可略过。

我的代码情况:

1. controller内无返回值,因此不适用通常解决方案

public void downloadExt(HttpServletResponse response, DataQuery qry) throws IOException {
    try {
        // 查询数据 导出数据逻辑
    } catch (Exception e) {
            throw new BsException("文件下载失败");
    }
}

2. 再细看日志,报错内其他信息

org.springframework.http.converter.HttpMessageNotWritableException:
 No converter for [class com.xxx.dto.Result] with preset Content-Type 'application/vnd.ms-excel;charset=utf-8'

发现虽然接口代码没有返回值,但是 前端请求接口的时候 的确返回了 com.xxx.dto.Result 对象

3. 查看代码是否有全局异常处理

public class ExceptionHandler  implements GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result errorException(Exception e) {
        log.error(e.getMessage(), e);
        return Result.fail(xxxx);
    }
 }

经查看,是全局异常处理捕捉了第1步的controller抛出的异常,然后返回了Result对象,导致下载报错。

但是 根因不在这里,而是在导出的controller代码里面报错了

public void downloadExt(HttpServletResponse response, DataQuery qry) throws IOException {

    try {

        **// 查询数据 导出数据逻辑**

    } catch (Exception e) {

            log.info(null, e);

            throw new BsException(“文件下载失败”);

    }

}

打出日志,查看日志,即可解决问题

 

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/cd090f2872.html