CharacterEncodingFilter 失效

本文解析了GET与POST请求中参数位置的不同导致CharacterEncodingFilter仅对POST请求生效的原因。GET参数位于头部,POST参数位于body,故设置请求编码只影响后者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

 

   <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/web/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

 

该方式为什么对POST而对GET无效呢?

 

不妨看看CharacterEncodingFilter内的实现 doFilterInternal

该方法调用

request.setCharacterEncoding(this.encoding);

而该方法的说明

Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().

注意到没,只对body起作用。

而get方式的请求参数在hearder里

post方式的请求参数在body里

 

原因自然清晰了。http://blog.youkuaiyun.com/untager/article/details/6334163

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值