Java Spring MVC:字符编码过滤器;为什么只通过强制设置响应编码?

Java Spring MVC:字符编码过滤器;为什么只通过强制设置响应编码?,java,spring,character-encoding,Java,Spring,Character Encoding,我正在看SpringMVC提供的CharacterEncodingFilter。我想知道为什么只有当请求编码被强制为给定编码时才可以设置响应编码?如果在accept标头字段中未指定任何内容,为什么不能设置默认响应编码?或者如果请求中不存在编码 守则: @Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterCha

我正在看SpringMVC提供的CharacterEncodingFilter。我想知道为什么只有当请求编码被强制为给定编码时才可以设置响应编码?如果在accept标头字段中未指定任何内容,为什么不能设置默认响应编码?或者如果请求中不存在编码

守则:

@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);
}
我找到这个作为参考 说明只有在强制设置请求编码时才能设置响应编码。为什么?

提前感谢,,
马丁

我可以告诉你尤尔根·霍勒在link上说了什么

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

<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>

字符编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
字符编码滤波器
/*
编辑:

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

  • 为什么只有当请求编码被强制为给定编码时才可以设置响应编码
  • 如果在accept标头字段中未指定任何内容,为什么不能设置默认响应编码?或者如果请求中不存在编码

  • 我认为Boris在评论中的将回答这些问题。

    如果没有其他办法,您可以在security-Context.xml中创建一个过滤器(bean),并设置forceEnconding=true

    <bean id="characterEncodingFilter" class="org.springframework.web.filter.CharacterEncodingFilter">
        <property name="encoding" value="utf-8"></property>
        <property name="forceEncoding" value="true"></property>
    </bean>
    
    
    
    不要忘记设置新的自定义过滤器:

    <security:custom-filter ref="characterEncodingFilter" after="FIRST"/>
    

    可能与(如果我没有遗漏什么的话)有关,谢谢你的回答。但这也将强制对请求进行编码。我想知道为什么他们为了设置响应编码而强制设置请求编码。