Transfer-Encoding: chunked添加Content-Length: 574712返回

2023-05-16

一、问题背景:

开发中有时候有的功能需要返回content-length字段,根据此字段进行下载进度的展示。而springboot默认在数据量大的时候是进行了Transfer-Encoding: chunked 设置的。
需要我们手动对需要返回Content-Length: 574712的接口进行filter配置。

二、添加filters

FilterConfig.java

package com.eduer.books.config;
 
import com.eduer.books.modules.app.filters.AddContentLengthFilter;
import com.google.common.collect.Lists;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; 
 
import java.util.List;

/**
 * Filter配置
 *
 * @author books
 */
@Configuration
public class FilterConfig {

    /**
     * 给特定接口加content-length返回
     * @return FilterRegistrationBean
     */
    @Bean
    public FilterRegistrationBean contentLengthFilterRegistrationBean() {
        FilterRegistrationBean filterBean = new FilterRegistrationBean();
        filterBean.setFilter(new AddContentLengthFilter());
        List<String> urls = Lists.newArrayList();
        // 只针对指定接口类型返回content-length
        urls.add("/app/clientApi");
        filterBean.setUrlPatterns(urls);
        return filterBean;
    }
}

三、新建AddContentLengthFilter

AddContentLengthFilter.java

package com.eduer.books.modules.app.filters;

import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingResponseWrapper;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class AddContentLengthFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        ContentCachingResponseWrapper cacheResponseWrapper;
        if (!(response instanceof ContentCachingResponseWrapper)) {
            cacheResponseWrapper = new ContentCachingResponseWrapper(response);
        } else {
            cacheResponseWrapper = (ContentCachingResponseWrapper) response;
        }

        filterChain.doFilter(request, cacheResponseWrapper);

        cacheResponseWrapper.copyBodyToResponse();
    }
}

四、测试:

4.1 修改前:

Response Headers没有返回 Content-Length: 574712的属性。
在这里插入图片描述

4.2 修改后:

已经成功添加了 Content-Length: 574712的属性。
在这里插入图片描述

END

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Transfer-Encoding: chunked添加Content-Length: 574712返回 的相关文章

随机推荐

  • FreeRTOS初级篇----删除任务

    任务既然可以被创建 xff0c 那么自然也可以被删除 xff0c 对于某些执行一次或几次就不需要的任务来说 xff0c 可以在执行完成后 xff0c 把此任务删除 xff0c 可以通过别的任务将其删除 xff0c 也可以任务自己删除自己 任
  • FreeRTOS初级篇----一个函数创建多个任务

    之前说过 xff0c 创建任务的时候 xff0c 可以传递给任务参数 xff0c 下面通过实验 xff0c 对一个任务函数传入不同的参数展示如何使用一个函数创建多个任务 任务函数 xff1a 把传入的数据转换为int型数据然后打印出来 sp
  • 大学生想要通过看书自学编程,却始终没成功,是因为你没有技巧!

    在大学里面 xff0c 有很多的方式来学习编程 xff0c 从在线教程到完成在线课程 xff0c 到密集编程的新手训练营 教程都很棒 xff0c 但它们通常只给你基础知识 与此同时 xff0c 在线教程和线下课程可能非常昂贵 xff0c 虽
  • FreeRTOS初级篇----任务管理

    一 任务状态 再FreeRTOS中 xff0c CPU同一时刻只执行一个任务 xff0c 只不过是所有任务切换的速度特别快 xff0c 默认1ms切换一次任务 xff0c 所以宏观上来看就是CPU再同时运行所有任务 根据任务的执行情况 xf
  • FreeRTOS中级篇

    一 内存管理 1 五种内存管理模式 FreeRTOS提供了5种内存管理实现方法 xff0c 可以根据不同的使用场合选择不同的模式 关于5中内存管理模式可以看下面这篇文章 链接 https zhuanlan zhihu com p 11527
  • LVGL8移植FATFS并适配到STM32F407

    目前LVGL版本已经更新到8 3版本 xff0c FATFS也是在嵌入式领域常用的文件系统 网上许多在LVGL上移植FATFS的教程大都是基于LVGL7版本的 xff0c 而且过程较为凌乱 本文旨在帮助大家了解在LVGL8上移植FATFS文
  • openstack dashboard简体中文汉化

    这里阐述的是fuel工具部署的openstack 环境的dashboard进行简体中文汉化 1 xff09 直接运行 apt get install gettext 命令 2 xff09 转到fuel已经配置好的中文配置文件夹下 cd us
  • 【转】gcc编译错误表

    conversion from s to s not supported by iconv iconv 不支持从 s 到 s 的转换 iconv open iconv open no iconv implementation cannot
  • _tcsstr的用法以及源码的源码

    tcsstr 字符串1在字符串2中首次出现的位置 xff0c 未出现返回NULL值 xff1b tcsrchr xff1a 字符1 在字符串2中首次出现的位置 xff0c 未出现返回NULL值 TCHAR字符串操作函数 xff1a tcsl
  • 修改ElementUI默认滚动条的样式

    一 默认的滚动条 很宽很占地方 xff0c 不美观 xff0c 与页面设计格格不入 二 优化后的滚动条 很美观 xff0c 可以根据实际风格调整颜色 xff0c 宽度 xff0c 高度等 三 优化代码 在全局样式里加入以下代码 xff0c
  • K8S异常之出现大量被驱逐的pod,导致服务无法访问的问题

    一 背景 用kuboard作为k8s管理工具的 xff0c 运行一段时间后 xff0c 访问时 xff0c 浏览器显示以下提示 xff1a 排查问题 1 查看k8s的情况 如下 xff0c 发现正常 root 64 nb001 data k
  • 服务监控(四)之SpringBoot整合Prometheus

    1 新建一个springboot项目 我这里版本是 xff1a 2 2 4 RELEASE xff0c pom中加入如下必要依赖 xff1a span class token comment lt https micrometer io d
  • 服务监控(五)之Grafana 接入Prometheus 的数据实现服务监控

    官方文档 xff1a https prometheus io docs visualization grafana 1 添加Prometheus 数据源 1 1 从下图所示的位置进入 xff0c 添加data source 1 2 点击 A
  • 应用程序运行***buffer overflow detected*** terminated Aborted异常退出问题

    今天运行程序 xff0c 改了一段代码 xff01 然后每次一运行程序就异常退出 xff0c 打印如下信息 xff1a buffer overflow detected shm costomer terminated Aborted 根据单
  • URAM和BRAM有什么区别

    无论是7系列FPGA UltraScale还是UltraScale Plus系列FPGA xff0c 都包含Block RAM xff08 BRAM xff09 xff0c 但只有UltraScale Plus芯片有UltraRAM也就是我
  • 服务监控(六)之Prometheus接入mysqld_exporter使用Grafana监控MySQL

    需准备的前置内容 xff1a 1 Prometheus安装配置 直通车 xff1a https blog csdn net wdy 2099 article details 124204720 2 Grafana安装配置 直通车 xff1a
  • CentOS7 升级OpenSSH9.0全过程和坑

    近日 xff0c 漏洞肆虐 xff0c 需要升级新版本 xff0c 才能解决漏洞 故有此文 xff1a 0 查看当前版本 span class token punctuation span root 64 host testsvc open
  • Gradle下载安装

    Gradle 官网地址 xff1a https gradle org releases 一 下载 访问上述地址https gradle org releases 选择下载 xff0c binary only 和 complete都可以 下载
  • Gradle 新建项目及Gradle常用命令&镜像源修改

    一 Gradle 项目的目录结构说明 xff1a 二 创建 Gradle 项目 用idea创建 xff0c 按图示步骤即可 创建完项目后 xff0c 配置gradle的安装目录 xff1a 创建完成后的gradle项目的目录结构 xff0c
  • Transfer-Encoding: chunked添加Content-Length: 574712返回

    一 问题背景 xff1a 开发中有时候有的功能需要返回content length字段 xff0c 根据此字段进行下载进度的展示 而springboot默认在数据量大的时候是进行了Transfer Encoding chunked 设置的