项目使用了SpringMVC框架,使用@RequestBody交互数据的时候出现了下面的异常:
这里写图片描述
很明显是JackSon解析json出现了编码问题。
原因是而json字符串的分隔符必须是英文标点,当json字符串中含有中文时,使用jackson解析会出异常。

目前有两种解决方式:

第一种方式:
在服务器中修改JVM配置:
tomcat:
在catalina.bat文件中:
windows
set JAVA_OPTS = -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN -Dsun.jnu.encoding=UTF-8

linux
JAVA_OPTS = “-Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN -Dsun.jnu.encoding=UTF-8”

比如:
打开catalina.bat文件 打开后会从第一行开始注释,从上往下找到第一行没有注释的,在其上方,添加
这里写图片描述

weblogic:
windows
set JAVA_OPTIONS = -XX:MaxPermSize=256m -Xmx1024m -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN -Dsun.jnu.encoding=UTF-8

linux
JAVA_OPTIONS = “-XX:MaxPermSize=256m -Xmx1024m -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN -Dsun.jnu.encoding=UTF-8”
export JAVA_OPTIONS

修改完成后启动项目,看日志的前几十行,会有:
这里写图片描述
即修改完成,问题解决!

不过还有个比较坑的是,如果你是用的eclipse的话,你还需要设置:
这里写图片描述
这里写图片描述

这是因为eclipse中创建tomcat会自动创建一个配置的项目出来的,所有启动的配置都会读取那个项目的,一般eclipse全局改了为utf-8编码就会默认这里也是utf8的。

第二种方式:
就是将字符串进行编码修改了,比如:

byte[] strArray = jsonData.getBytes("utf-8")

后面再该怎么传就怎么传。

这个问题还有个注意点就是不要和post/get请求的那种编码问题搞混了。

GitHub 加速计划 / js / json
57
5
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
82f4f706 * :rotating_light: suppress warnings Signed-off-by: Niels Lohmann <mail@nlohmann.me> * :rotating_light: suppress warnings Signed-off-by: Niels Lohmann <mail@nlohmann.me> * :rotating_light: suppress warnings Signed-off-by: Niels Lohmann <mail@nlohmann.me> * :rotating_light: suppress warnings Signed-off-by: Niels Lohmann <mail@nlohmann.me> * :rotating_light: suppress warnings Signed-off-by: Niels Lohmann <mail@nlohmann.me> * :rotating_light: suppress warnings Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me> 17 小时前
68c25aec * :memo: update customers Signed-off-by: Niels Lohmann <mail@nlohmann.me> * :memo: add badge to Cloudback Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me> 4 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐