java - @PathVariable 编码问题 - Spring MVC

标签 java spring jakarta-ee spring-mvc

我有 1 个问题无法解决。我收到了一个 POST 请求并从 RequestMapping 获取了一个变量,但编码完全错误。

请求网址:127.0.0.1:8080/projeto/ws/cidade/Uberl%C3%A2ndia

Controller :

@RequestMapping (value = "/city/{name}", method=RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE) 
     public ResponseEntity<?> doGetPath(@PathVariable("name") String name) {
} 

@PathVariable("name") 返回的值: Uberlândia

正确返回:乌贝兰迪亚

谁能帮帮我?

最佳答案

这是因为运行 Controller 的 JVM 使用的字符编码与用于对请求进行编码的编码不同。

要查看此内容,请使用编码后的 URL 127.0.0.1:8080/projeto/ws/cidade/Uberl%C3%A2ndia 并将其传递给 http://www.url- encode-decode.com/ 使用 UTF-8,结果是 Uberlândia

但如果使用 ISO-2022-CN 进行解码,则结果为 Uberlândia

要解决此问题,需要以与编码相同的方式对字符串进行解码。

要以全局方式更改服务器使用的编码,可以将 JVM 使用的编码设置为 UTF-8,请参阅 answer . CharacterEncodingFilter 将确保 HTTP 请求的内容将使用给定的编码进行解码。

另一种方法是让发送请求的客户端以服务器期望的方式对其进行编码。

但通常为了避免这些问题,您可能希望系统中的每个组件都配置为使用 UTF-8。

关于java - @PathVariable 编码问题 - Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804268/

相关文章:

java - 自动化应用程序发送短信的测试

java - 您能否定义您的 Java Web 应用程序应使用哪个 Java 版本

javascript - 从 JavaScript 访问 Spring 模型变量

jsp - Tomcat部署错误

java - CDI @Inject 或普通的旧 java ee 5 注释

java - 如何确定性地将连续整数映射到均匀分布的 double

java - 使用扫描仪将大文件读入内存时内存不足

java - 具有 Spring Boot 集成的 Cucumber Java - Spring @Autowired 抛出 NullPointer 异常

java - 负载测试期间 Tomcat 上的 HTTP 内部错误 500

java - 用于改进开发的 Android 框架/技术