HttpServletResponse通过setContentType设置响应头失败,以及解决办法

深入解析HttpServletRequest与HttpServletResponse:Java Web开发核心对象实战指南 在Java Web开发中,理解HTTP协议的底层实现是构建高性能应用的基础。HTTP协议作为Web通信的基石,通过请求-响应模型实现客户端与服务器的数据交换。在Java Servlet规范中,HttpServletRequest和HttpServletResponse对象正是这一协议的具体实现,它们作为容器与应用程序之间的桥梁,封装了请求和响应的所有细节。掌握这两个对象的工作原理,不仅能优化应用性能,还能避免常见的线程安全和数据流处理陷阱。在实际开发中,正确使用请求参数获取、响应流操作以及作用域管理,对提升 阅读详情
AI摘要

本文介绍了一个在Spring Cloud Dalston.SR1版本中,使用Spring Boot 1.5.3.Release时遇到的问题,即从Controller直接返回JSON字符串时,content-type被错误地设置为text/plain。文中提供了解决方案,即通过设置@RequestMapping的produces属性来修正content-type。

1 背景

1.1 版本信息

  • springcloud版本:Dalston.SR1
  • springboot版本:1.5.3.Release
  • JDK版本:1.8

1.2 缺陷描述

当我从Controller或者ControllerAdvice直接返回一个JSON字符串时,通过response.setContentType("application/json;charset=UTF-8");失败,前端实际拿到的content-type为text/plain;charset=UTF-8.如果前端对头部有校验的话,很可能会出现拿不到数据的情况.以下为示例代码,当调用/fail接口就可以看到结果

  • 全局异常处理类
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    @ExceptionHandler(value = {Exception.class})
    @ResponseStatus(value = HttpStatus.OK)
    @ResponseBody
    public Object defaultHandler(HttpServletResponse response,Exception e) throws JsonProcessingException {
        log.error(e.getMessage(),e);
        response.setContentType("application/json;charset=UTF-8");
        if(e instanceof PSQLException
                || e instanceof PersistenceException
                || e instanceof MyBatisSystemException
                || e instanceof BadSqlGrammarException){
            return  ResultObject.exception(1,"内部错误:数据库操作失败");
        }

        if(e instanceof HttpHostConnectException
                || e instanceof RetryableException){
            return ResultObject.exception(1,"连接失败:请检查第三方系统接入状态");
        }

        return "{\n" +
                "  \"code\": 1,\n" +
                "  \"msg\": \"未知错误,请联系管理员\"\n" +
                "}";
    }

}
  • controller层代码
@Api(value = "测试", tags = "测试")
@RequestMapping("/test")
@RestController
public class TestController {

    @GetMapping(value = "/fail")
    @ApiOperation("失败")
    public String fail() {
        int i=1/0;
        return "fail";
    }

  
}

swagger调用结果:

  • 响应结果是正常的json串
    在这里插入图片描述
  • 头部信息异常
    在这里插入图片描述

2 解决办法

目前尚未查到具体原因,但是通过设置@RequestMapping中的produces属性可以达到修改响应头的目的

3 总结

当你出现以下状况

  • 响应体为正常json串
  • 通过response的setHeader或者setContentType修改content-type
  • 前端接收的响应头信息为:text/plain;charset=UTF-8
  • controller层返回类型为String,而不是对象

那么!!可以尝试修改RequestMapping代码
@GetMapping(value = "/fail",produces="application/json;charset=UTF-8")


虽然这不是最好的办法,但是可以临时解决一下问题,与君共勉
Java Excel导出文本格式设置:EasyExcel四种方案详解与避坑指南 在数据处理与系统集成中,Excel文件是广泛使用的数据交换格式。其核心原理在于单元格的数据类型与格式控制,这直接决定了数据在展示、计算和传输时的准确性与完整性。对于Java后端开发而言,精确控制单元格格式,尤其是将长数字、编码等标识符设置为文本格式,是避免科学计数法、前导零丢失等数据失真问题的关键技术价值所在。这在财务对账、供应链管理和数据报表导出等应用场景中尤为重要。本文以阿里巴巴开源的EasyExcel框架为例,深入解析了通过注解驱动、拦截器处理、样式策略和自定义数据构建四种方案来实现单元格文本格式控制 阅读详情

相关推荐

Java Servlet Filter 原理与生产级实战:从请求拦截到链式控制

Servlet Filter 是 Java Web 请求处理流水线的核心组件,其本质是基于责任链模式的容器级拦截机制,运行在 DispatcherServlet 之前,可捕获所有 HTTP 请求(含静态资源、转发、错误页等)。它通过 init/doFilter/destroy 三阶段管理生命周期,依赖 dispatcherTypes 控制触发时机,依靠 filter chain 顺序决定执行逻辑。技术价值在于统一处理跨域、字符编码、日志、权限等横切关注点,避免业务代码污染。典型应用场景包括中文乱码治理、To

weixin_34290631的博客 343

response.setContentType()的作用及参数(转载)

response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。例如web浏览器就是通过MIME类型来判断文件是GIF图片。通过MIME类型来处理json字符串。 Tomcat的安装目录\conf\web.xml 中就定义了大量MIME类型 ,可以参考。response.setCo...

weixin_30878501的博客 2191

SpringBoot文件上传安全:防御PDF-XSS攻击的立体化实战方案

跨站脚本攻击是Web安全领域的核心威胁之一,其原理是攻击者向网页中注入恶意脚本,当用户浏览时,脚本在浏览器端执行,从而窃取数据或劫持会话。随着Web应用功能的复杂化,攻击载体已从传统的HTML扩展至各类文件,PDF文件因其支持嵌入JavaScript而成为新的风险点。在文件上传这一常见功能中,若缺乏深度内容检测,恶意PDF可能成为XSS攻击的跳板,危害应用安全。本文聚焦于SpringBoot框架下的文件上传服务,通过构建上传检测、存储净化、预览隔离的三层纵深防御体系,系统性地解决PDF-XSS风险。文中详细

csdn864883的博客 393

response.setContentType()的作用及参数

response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。 例如web浏览器就是通过MIME类型来判断文件是GIF图片。通过MIME类型来处理json字符串。 Tomcat的安装目录\conf\web.xml 中就定义了大量MIME类型 ,可以参考。 response.setC

只作为个人备忘录 6万+

【Java实战】纯内存操作!基于 Base64 文件实现多文件打包下载

本文介绍了一个实用的Java ZIP压缩工具类,主要用于处理Base64编码文件的批量打包下载。该工具类支持将多个Base64格式的文件(如图片、合同等)解码后压缩成ZIP包,核心功能包括Base64解码、创建ZIP条目、写入文件数据和关闭条目。文章详细说明了使用场景(附件导出、报表打包等)、关键实现步骤和注意事项,特别提醒要注意Base64前缀处理、大文件内存溢出风险以及文件名重复问题。该工具类具有简洁易用、健壮性强、日志完善等特点,适用于各种需要批量文件压缩的业务场景。

00后Java全栈 | 深耕智能制造 | DevOps实践者 239

HTTP请求与响应:Web开发核心机制详解

HTTP协议作为Web开发的基石,其请求(Request)与响应(Response)机制构成了客户端与服务器通信的基础框架。从技术原理看,HTTP协议采用无状态的请求-响应模型,通过纯文本格式传输数据,这带来了灵活性的同时也产生了编码问题等常见挑战。在工程实践中,GET与POST方法的正确选择、表单数据的编码处理、AJAX异步请求等技术细节直接影响系统性能和安全性。特别是在中文处理场景下,统一使用UTF-8编码能有效避免乱码问题。理解HTTP报文结构(包含请求行/状态行、头部字段和消息体)和状态码语义,是开

weixin_30500473的博客 523

setContentType() 方法

response的setContentType() 方法用于设置发送到客户端的响应的内容类型 参数类型有以下几种: text/html  ,  text/plain  ,  application/msword等 例如: setContentType(“text/html;charset=UTF-8”);   响应类型为HTML格式的 setContentType(“text/plain

southcamel的专栏 1万+

【亲测有效】OpenClaw Gateway 出现 “(no output)“ 卡死问题完整解决指南:从手动重启到 systemd Watchdog 自动恢复

最近在使用 OpenClaw(自托管 AI 助手框架,前身 Clawdbot/Moltbot)时,遇到了一个非常常见的顽疾:TUI(终端界面)或 Telegram 等通道经常显示 "(no output)",消息发出去后机器人完全没反应,看起来像是卡死了。

hampeter的博客 8612

response.setcontenttype用法详解

通过本文,我们深入了解了的基本用法和常见场景应用。希望这些知识能够帮助你更好地处理HTTP响应,提供更灵活和丰富的Web应用体验。

聚娃科技开发者博客 3423

Halcon与C#联合编程(一):使用S7协议实现机器视觉上位机与西门子PLC联动

本项目技术栈:C#基础,多线程,Halcon DirectShow,Halcon形状检测,Halcon QR码识别,西门子S7通讯协议,西门子PLC为核心的下位机及执行元件

虎鲸不是鱼 1万+

域自适应的理解与想法(Domain Adaptation)

这幅图是域适应非常有名的一篇论文中的插图,被很多文章转载。 什么是领域自适应? Domain Adaptation是迁移学习中很重要的一部分内容,目的是把分布不同的源域和目标域的数据,映射到一个特征空间中,使其在该空间中的距离尽可能近。于是在特征空间中对source domain训练的目标函数,就可以迁移到target domain上,提高target domain上的准确率。 上面的图主要的思想来源于GAN,上图由三部分组成:特征映射网络 标签分类网络和和域判别网络 其中,source domain的数.

yuanxue18的博客 5983

java设置响应编码_Java Web 编码问题二:Servlet响应头的的设置

通过Java Web 编码问题一:jsp的编码,我们知道我们只需要在文件中设置好编码,就基本没有问题了。但是我们们之间使用Servlet的呢?下面是一个简单的测试Servlet,如果保存UserInfo.saveUser(phoneNum)返回真就输出成功,否则就输出失败:publicclassUserRegisterServletextendsHttpServlet{privates...

weixin_30977281的博客 600

STM32CubeIDE中文注释变乱码终极解决方案:3步设置永久解决锟斤拷问题!

你是否在STM32CubeIDE中遇到过这样的崩溃场景?——精心编写的中文注释在重新生成代码后变成“锟斤拷”乱码,不仅影响代码可读性,反复修改更是浪费大量时间!作为STM32开发者,我曾被这个问题困扰许久,试过修改软件设置、工程编码却始终治标不治本。直到发现这个基于Java环境变量的终极解决方案,才彻底解决了中文乱码难题。

smart_boy__的博客 2987

java实现文件下载

java实现文件下载 下载原理 1.需要通过HttpServletResponse.setContentType方法设置Content-Type头字段的值,为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如,"application/octet-stream"或"application/x-msdownload"等. 2.需要通过HttpServletResponse.setHeader方法设置Content-Disposition头的值为"attachment;filename=文件名".

weixin_44177024的博客 1584

添加USB wifi驱动到RK3568

在日常开发中我们经常需要用到wifi功能,一般来说soc厂家都会事先做好了几个厂家的wifi驱动在内核源码目录下,我们只需要按原理图配置对应的设备树即可。常用的wifi的接口有:USBSDIOPCIE下面来介绍这这种接口是如何使用wifi芯片。提示:以下是本篇文章正文内容,下面案例可供参考本小节介绍了一个配置一个USBwifi驱动的整个流程,并没有介绍到SDIO,下小节基于AP6256介绍如何使用。

qq_24093081的博客 2051

8.19华为OD机试真题 新系统 - 基站低能耗时段统计 (Java/Py/C/C++/Js/Go)

8.19华为OD机试真题 新系统 - 基站低能耗时段统计 (Java/Py/C/C++/Js/Go)

算法大师! 1155

Unity WebGL部署实战:Nginx与Tomcat服务器配置全解析

WebGL技术作为在浏览器中运行高性能图形应用的核心方案,其部署成功的关键在于服务器环境的正确配置。核心原理涉及MIME类型识别、传输压缩优化和缓存策略,这些直接决定了应用能否正常加载与运行。在工程实践中,针对Unity WebGL构建产物的特殊需求,服务器需正确配置.wasm文件的MIME类型为application/wasm,并优先支持Brotli等高压缩比格式以优化加载性能。本文聚焦于解决Unity WebGL部署中的常见痛点,通过详解Nginx与Tomcat(含Spring Boot)的配置清单,提

weixin_30448603的博客 413

解决Qt字体问题:QFontDatabase: Cannot find font directory xx/lib/fonts

1.直接在main函数里设置app的整体字体库.这个错误提示比较明显的就是字体库缺失。

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 3044

java request类_javaweb part3 ----HTTP协议详解,以及java中request response的类以及方法

HTTP协议详解Requsert Headers 浏览器 向服务器 发送的 请求信息Get /Myweb/persons.html HTTP/1.1 (必须)Host:localhost:8080Connection:keep-aliveAccept支持格式:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/w...

weixin_29913191的博客 132

手把手教你模拟登录豆瓣并爬取个人书影音数据:从Cookie解析到反爬攻防实战

在开始写代码之前,先明确我们需要的工具。:建议用3.10以上版本,方便使用一些新特性(如match语句)httpx:比requests更现代,支持HTTP/2,异步性能强,连接池复用好:解析HTML,语法简单,容错性强selenium:仅用于处理登录时的滑块验证(模拟真人)pandas:最终数据清洗和导出Excel/CSVretrying:自动重试机制,应对临时封禁:随机UA,降低特征lxml:作为BeautifulSoup的解析器,速度快为什么不只用requests?

2201_76125261的博客 578

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring Boot文件访问安全实战:动态代理实现权限控制与安全下载

在Web应用开发中,文件访问控制是保障数据安全的核心环节,它基于身份认证与授权机制,确保只有合法用户才能访问特定资源。其技术原理在于拦截HTTP请求,在应用层进行细粒度权限校验,而非直接暴露文件系统路径。这一机制对于保护敏感数据、防止越权访问具有重要价值,广泛应用于OA、在线教育、医疗影像等场景。本文聚焦于Spring Boot生态,通过动态代理方案,深入探讨如何实现文件上传与下载的权限校验,并结合文件存储路径安全、响应头设置等工程实践,构建一套可靠的文件访问安全体系,有效应对水平越权、路径遍历等常见安全挑

weixin_34268310的博客 490

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring Boot项目里iText生成PDF报‘无页面’错误?这3个检查点和1个工具类帮你搞定

本文详细解析了Spring Boot项目中iText生成PDF时出现'The document has no pages'错误的根本原因,并提供了3个关键检查点和1个高效工具类解决方案。通过数据层预校验、模板加载保障和流处理安全范式,确保PDF生成稳定性,同时分享可复用的PDF工具类设计,帮助开发者快速定位和解决iText常见问题。

weixin_30312563的博客 481

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring Boot项目里用iText填PDF模板,结果列表为空就报错?教你写个通用的防错工具类

本文介绍了在Spring Boot项目中使用iText填充PDF模板时遇到列表为空报错问题的工程化解决方案。通过设计可复用的PDF生成工具类,支持自动空值处理和自定义展示,并结合AOP实现统一异常处理,有效解决'The document has no pages'错误,提升PDF导出功能的健壮性和开发效率。

weixin_30314813的博客 439

EasyExcel 百万级数据导出

本文档提供的工具类基于阿里 EasyExcel 封装,专门解决百万级大数据量 Excel 导出场景下的OOM(内存溢出)问题,支持:小数据量:全量写入(简单高效)大数据量:分页写入(核心方案,避免内存溢出)异步导出:支持任务进度追踪、结果查询@Data@ExcelProperty("用户ID") // Excel列名@ExcelProperty("用户名")@ExcelProperty("手机号")@ExcelProperty("创建时间")@Bean5, // 核心线程数。

weixin_54009596的博客 648

java中io流(文件流)的使用、资源加载笔记(一)

java中io流(文件流)的使用、资源加载笔记(一)

enthan809882的博客 1384
上一篇: Java开发工程师必会技术自检清单
下一篇: Spring通过ResponseBody返回对象时,JSON属性变为首字母大写
一步一结
博客等级 码龄7年 50粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值