Java 什么';这两者之间的区别是什么;“编码”;Tomcat的编码过滤器和请求。setCharacterEncoding
有很多方法可以解决编码问题:Java 什么';这两者之间的区别是什么;“编码”;Tomcat的编码过滤器和请求。setCharacterEncoding,java,spring,tomcat,encoding,utf-8,Java,Spring,Tomcat,Encoding,Utf 8,有很多方法可以解决编码问题: 类过滤器编码 在Tomcat的server.xml中设置URIEncoding=UTF-8,如 请求。setCharacterEncoding(utf-8) 今天,我遇到了一个问题,路径参数没有像 @ResponseBody @RequestMapping(value="/context/method/{key}",method=RequestMethod.GET,produces = "application/json;charset=utf-8") publ
- 类过滤器编码
- 在Tomcat的server.xml中设置URIEncoding=UTF-8,如
- 请求。setCharacterEncoding(utf-8)
@ResponseBody
@RequestMapping(value="/context/method/{key}",method=RequestMethod.GET,produces = "application/json;charset=utf-8")
public String method(@PathVariable String key){
logger.info("key="+key+"------------");
}
我看到钥匙被破译坏了!如果我传递一个单词”新浪"
从前端开始,它将变成“æ°æ檔
它的输出是相同的“æ°æµª”
。因此,确实,path变量是用ISO-8859-1解码的
然后我尝试在我的web.xml
中添加一个过滤器来解决这个问题:
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
即使我取下过滤器,它也能起作用
但我仍然对编码问题感到困惑。此外,这是唯一的GET方法,如果是POST方法,我想解决方案可能会有所不同
谁能解释一下,对于什么样的问题,我们应该采取什么不同的编码解决方案
谢谢!
配置请求正文的编码。即,它影响CharacterEncodingFilter
请求参数等的编码,但不影响POST
参数的编码GET
用于指定URI的编码,因此它会影响URIEncoding
参数GET
告诉Tomcat在解码URI时使用为请求正文配置的编码。因此,据我所知,如果您设置了useBodyEncodingForURI=“true”
和CharacterEncodingFilter
,那么您就不需要useBodyEncodingForURI=“true”
URIEncoding
用于CharacterEncodingFilter
请求POST
(或URIEncoding
)用于useBodyEncodingForURI=“true”
请求GET
- CharacterEncodingFilter配置请求正文的编码。也就是说,它影响请求后参数等的编码,但不影响GET参数的编码
- useBodyEncodingForURI=“true”告诉tomcat使用CharacterEncoding(可以通过CharacterEncodingFilter设置)来解析QueryString。它是影响GET请求参数
- URIEncoding要解析URI,默认值为ISO-8859-1
- 默认UTF-8
request.setCharacterEncoding
2.我读过一本书,在GET
方法中,pathvar和查询字符串(URL)是分开解码的。因此,我们需要,URIEncoding用于URI(path var),而useBodyEncodingForURI
用于URL上的查询字符串。这本书错了吗?
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
URIEncoding="UTF-8" useBodyEncodingForURI="true" ----Here is Added
/>