JackSon解析json中文出现的编码问题

30 篇文章 0 订阅
20 篇文章 0 订阅

项目使用了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请求的那种编码问题搞混了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中获取请求体的JSON解析JSON对象时出现了参数含有空格和乱码的问题出现这个问题可能是由于请求体JSON中的参数值中含有空格或者非UTF-8编码导致的。 要解决这个问题,首先需要检查并确认请求体JSON中的参数值是否正确且符合JSON格式的规范。如果参数值含有空格或其他特殊字符,建议在发送请求时对参数值进行URL编码,确保其在传输过程中不会出现乱码。 在Java代码中,可以使用URLDecoder对请求体JSON进行解码。例如,可以使用如下代码获取请求体中的JSON字符串,并进行解码: String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); String decodedBody = URLDecoder.decode(body, "UTF-8"); 接下来,可以使用JSON库(如Jackson、Gson等)将解码后的JSON字符串解析JSON对象。例如,对于使用Jackson库的情况,可以使用如下代码将解码后的JSON字符串解析JSON对象: ObjectMapper mapper = new ObjectMapper(); JsonNode jsonNode = mapper.readTree(decodedBody); 在解析JSON对象之后,可以通过遍历JSON对象的属性、调用对应的getter方法等获取具体的参数值,进行后续的业务逻辑处理。 综上所述,要解决Java获取请求体JSON解析JSON对象参数含有空格乱码的问题,需要注意参数值的格式以及编码方式,并在Java代码中正确解码和解析JSON对象。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值