添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

解决:No converter for [xxxx] with preset Content-Type ‘text/plain;version=0.0.4;charset=utf-8‘

最新推荐文章于 2023-11-22 18:30:00 发布
最新推荐文章于 2023-11-22 18:30:00 发布 阅读量8.5k

错误信息如下:

org.springframework.http.converter.HttpMessageNotWritableException: No converter for [xxxx] with preset Content-Type 'text/plain;version=0.0.4;charset=utf-8'
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:312)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:181)
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124)
    at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:428)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:75)
    at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:141)
    at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:80)
    at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1323)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1134)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1080)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)

例如上述错误信息,项目出现了某种异常,并且响应对象设置了响应头,如: Content-Type ‘text/plain;version=0.0.4;charset=utf-8’。
当内部抛出了异常后,项目中的全局异常处理返回了一个通用的实体对象,是JSON格式,和响应头的Content-Type不一致,导致SpringMVC在转换的时候报此类错误。

问题出现场景:

一般出现在,文件下载接口的实现上;
或者,程序内部抛出:ClientAbortException: java.io.IOException: 断开的管道

方案一:修改Controller定义

适合场景:返回格式只需兼容的情况

手动指定响应头,设置兼容其它格式,例如:

@PostMapping(value = "xxxx",
  produces = {MediaType.APPLICATION_OCTET_STREAM_VALUE, MediaType.APPLICATION_JSON_VALUE})

方案二:修改Controller返回值

适合场景:文件下载接口等

解决:原来有返回值的话,修改为返回void。因为文件下载接口,一般是借助HttpServletResponse对象来直接返回的。

方案三:全局处理

解决:在全局异常的处理中,加上下面的逻辑:

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    public static final String CLIENT_ABORT_EXCEPTION_CLASS = "org.apache.catalina.connector.ClientAbortException";
    @ExceptionHandler(Exception.class)
    public void handleException(Exception e, HttpServletResponse response) {
        if (CLIENT_ABORT_EXCEPTION_CLASS.equals(e.getClass().getName())) {
            log.warn("出现ClientAbortException");
            return;
        log.error("全局异常信息:{}", e.getMessage(), e);
                    解决:No converter for [xxxx] with preset Content-Type ‘text/plain;version=0.0.4;charset=utf-8‘
                    错误No converter for [xxxx] with preset Content-Type 'text/plain;version=0.0.4;charset=utf-8' 的分析和解决
起因是导出excel文件,发现下载的excel文件无法正常打开,总是提示文件损坏,需要修复,于是在代码中加入了以下代码
//2007版本excel导出
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
文件可以正常打开了,内容也没
					
No message body writer has been found for class com.alibaba.fastjson2.JSONObject, ContentType: */*
意思是:对于预设内容类型为“多部分/表单数据”的[class org.jeecg.common.api.vo.Result]没有转换器 response.setContentType("application/json;charset=utf-8");
No converter for XXX with preset Content-Type ‘application/octet-stream;charset=UTF-8‘ 在导出excel中返回公共封装类BaseResposne数据报错没有转换器,项目中把返回值改了void 其他原因是如下解决 解决办法 方法一:将FastJson更换为jackson-databind <dependency> <groupId>com.fasterxml.jackson.core</
babel预设React本机阶段0 尝试同时使用babel-preset-react-native和babel-preset-stage-0时,您在React Native中遇到奇怪的错误吗? 对于使用RN上最新和最出色的Babel功能有多么困难,您是否通常感到困惑和沮丧? 该预设适合您! npm install babel-preset-react-native-stage-0 --save 只需向您的React Native项目添加一个.babelrc文件,如下所示: "presets" : [ "react-native-stage-0" ] 您是否需要实验性的传统装饰器支持(由)? 使用它作为您的.babelrc: "presets" : [ "react-native-stage-0/decorator-support" ] // First line inside your app (App.js for this example) // Not needed with useBuiltIns: 'usage' //import '@babel/polyfill' 指定文件.browserslistrc而不是babel.config.js browsers: [...] :将由Autoprefixer和其他工具重用 useBuiltIns: 'usage
现在babel-preset-env稳定了,它已经,这个仓库已经被存档了。 此举使与Babel其余部分的发布和开发变得更加容易! 由于所有问题/标签也已移至该仓库,此仓库将变为只读。 请报告所有错误,并在上打开请求请求。 babel预设环境 一个Babel预设,可根据目标浏览器或运行时环境自动确定所需的Babel插件和 ,从而将向下编译为ES5。 npm install babel-preset-env --save-dev 如果没有任何配置选项,则babel-preset-env的行为与babel-preset-latest完全相同(或babel-preset-es2015,babel-preset-es2016和babel-preset-es2017在一起)。 但是,我们不建议您以这种方式使用preset-env因为它没有利用针对特定浏览器的强大功能。 " presets " : [ " env " ] 您还可以将其配置为仅包含支持的浏览器所需的polyfill和transforms。 仅编译所需内容可以使捆绑包更小,生活更轻松。 本示例仅包括覆盖0.
访问一个公司内部网站时,遇到下面的问题,导致网站不能打开: NET:ERR_CERT_AUTHORITY_INVALID message in Chrome. 从错误信息来看,这是由于网站的证书问题导致的,该证书应该是自签名证书。接下来尝试 导入该证书。 如果是外部网站,以及自己认不到的网站,请不要按下面的步骤操作,会有安全隐患。 解决步...