我回答我自己的问题。实际上,这相当复杂,我花了一些时间才能找到可行的解决方案。首先,我在Spring配置类(正是Spring
Boot环境)中创建了一个过滤器:
@Configuration@ComponentScan({ "istia.st.springmvc.config", "istia.st.springmvc.controllers", "istia.st.springmvc.models" })@EnableAutoConfigurationpublic class Config extends WebMvcConfigurerAdapter { @Bean public Filter cultureFilter() { return new CultureFilter(); }}在这里,我们声明了一个过滤器(默认情况下),它将在到达最终处理程序之前过滤每个请求。然后我创建了过滤器:
public class CultureFilter extends oncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // next handler filterChain.doFilter(new CultureRequestWrapper(request), response); }}[OncePerRequestFilter]是一个Spring类。技巧是用一个新的[CultureRequestWrapper(request)]替换实际的请求。然后,我创建了CultureRequestWrapper:
public class CultureRequestWrapper extends HttpServletRequestWrapper { public CultureRequestWrapper(HttpServletRequest request) { super(request); } @Override public String[] getParameterValues(String name) { // posted values a et b if (name != null && (name.equals("a") || name.equals("b"))) { String[] values = super.getParameterValues(name); String[] newValues = values.clone(); newValues[0] = newValues[0].replace(",", "."); return newValues; } // other cases return super.getParameterValues(name); }}我重新定义了[HttpServletRequest]的[getParameterValues],但这取决于将管理请求的最终servlet。我们必须重新定义此servlet使用的[HttpServletRequest]方法。



