Spring MVC:CharacterEncodingFilter; 为什么只强制设置响应编码?

我正在看一下Spring MVC提供的CharacterEncodingFilter。 我想知道为什么只有在请求编码被强制为给定编码时才能设置响应编码? 如果在接受标题字段中未指定任何内容,为什么不能设置默认响应编码? 或者如果请求中没有编码?

代码:

@Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) { request.setCharacterEncoding(this.encoding); if (this.forceEncoding) { response.setCharacterEncoding(this.encoding); } } filterChain.doFilter(request, response); } 

我发现这是参考https://jira.springsource.org/browse/SPR-3328?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel说明响应编码只能在请求时设置编码被强制设置。 为什么?

马丁,提前谢谢

我可以告诉你Juergen Hoeller在链接https://jira.springsource.org/browse/SPR-3328?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel上的内容 ,

在web.xml(Servlet 2.4+)中添加以下filter以设置编码:

  CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter  encoding UTF-8   forceEncoding true    CharacterEncodingFilter /*  

编辑:

CharacterEncodingFilter :即使在HTML页面或表单中指定,当前浏览器通常也不会设置字符编码。 如果请求尚未指定编码,则上述filter可以应用其编码,或者在任何情况下强制执行此filter的编码(“forceEncoding”=“true”)。 如果我们严格要编码字符,我们强行设置它。

  1. 为什么只有在请求编码被强制为给定编码时才能设置响应编码?
  2. 如果在接受标题字段中未指定任何内容,为什么不能设置默认响应编码? 或者如果请求中没有编码?

我认为Boris's在评论中Boris's 链接将回答这些问题。

如果没有其他工作,您可以在security-Context.xml中创建一个filter(bean)并设置forceEnconding = true;

     

不要忘记设置新的自定义filter: