HttpServletResponse设置headers返回,发现headers中缺少“Content-Length“和“Content-Type“两个参数。

业务中需要将用httpUtils请求返回的headers全部返回,塞到HttpServletResponse中,代码如下:

java 复制代码
HttpServletResponse response;

// 返回headers
Arrays.stream(httpResponse.getHeaders()).forEach(header -> response.setHeader(header.getName(), header.getValue()));

一、发现问题:

塞到HttpServletResponse中之后,发现headers中缺少"Content-Length"和"Content-Type"两个参数。

使用http直接请求,和使用本项目代理请求对比,发现最后headers中缺少"Content-Length"和"Content-Type"。

二、查找问题

看源码发现遇到这两个特殊字段时,分别赛到了setContentTypesetContentLength

三、解决问题

所以需要再遍历时候重新赛回去

java 复制代码
for (Header header : httpResponse.getHeaders()) {
        if ("Content-Type".equalsIgnoreCase(header.getName())) {
            response.setContentType(header.getValue());
        } else if ("Content-Length".equalsIgnoreCase(header.getName())) {
            response.setContentLength(Integer.valueOf(header.getValue()));
        } else {
            response.setHeader(header.getName(), header.getValue());
        }
}
相关推荐
budingxiaomoli6 分钟前
多线程(三)
java·开发语言
klzdwydz22 分钟前
注解与反射
java·开发语言
talenteddriver31 分钟前
java: 分页查询(自用笔记)
java·开发语言
enjoy编程31 分钟前
Spring-AI 利用KeywordMetadataEnricher & SummaryMetadataEnricher 构建文本智能元数据
java·人工智能·spring
繁华似锦respect32 分钟前
lambda表达式中的循环引用问题详解
java·开发语言·c++·单例模式·设计模式·哈希算法·散列表
heartbeat..1 小时前
介绍一下软件开发中常见的几种的架构模式
java·架构·开发
天天摸鱼的小学生1 小时前
【Java Enum枚举】
java·开发语言
爬山算法1 小时前
Redis(168) 如何使用Redis实现会话管理?
java·数据库·redis
程语有云1 小时前
生产事故-那些年遇到过的OOM
java·内存·oom·生产事故