请考虑以下查询字符串
siteId=360798&listingId=695332&stockFilename=6065/1mb%20&%20(Custom).jpg&uploadToken=2640861a8f06799416bae9d0a58839dd&username=Chuck%20Norris
我的MVC控制器上有以下内容
@RequestParam("stockFilename") String stockFilename
我期望在我的参数中获得" 6065 / 1mb& (自定义).jpg" ,但结果是" 6065 / 1mb" 。我的第一个猜测是这是一个编码问题,所以我去了web.xml并查看了我的编码过滤器,但这似乎是按顺序
<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>
接下来我去查看我的服务器设置
Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"
我已经添加了URIEncoding属性,因为我发现一篇文章将此解释为可能的罪魁祸首。但它根本没有解决我的问题。我现在实际上是出于想法,我仍然非常确定它必须是一个编码问题,并且Spring正在错误地解码它。我会继续搜索,但我们将不胜感激。
答案 0 :(得分:1)
在servlet-context中添加此方法和bean:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
public final class DoNotTruncateMyUrls implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof RequestMappingHandlerMapping) {
((RequestMappingHandlerMapping)bean).setUseSuffixPatternMatch(false);
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
Bean:
<beans:bean class="com.packagename.DoNotTruncateMyUrls" />
让我知道这是否有效,或者我有其他解决方案。