给某api发送http请求,结果查不到数据;而api开发者自测可以查到数据。僵持不下。
经过分析发现,我的url是经过urlencode编码的(传出去的中文变成%E5%B2这种),而api开发者的url是明文传输中文。
我通过httpclient发出的请求,使用uribuilder.addParameter追加参数,而该方法会自动将参数按utf-8编码,导致我传出去的url是%E5%B2。而api端没有解码,导致解析成错误的文字,从而查不到数据。
同样的,前端ajax请求,默认是utf-8编码。而springmvc web.xml中配置了如下字符集过滤器,会自动将utf-8编码的value解码,从而实现自动编码解码。如果没配置该字符集过滤器,则会解码失败。
<!-- 字符集 过滤器 -->
<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>/*</url-pattern>
</filter-mapping>