转换后,Gson JSON输出的字段名称中包含空格

时间:2018-10-19 14:45:57

标签: json spring-mvc gson

我有一个不寻常的情况。编码的输出包含json,每个字符之间都有空格。

{ " f o r m " : { " s a m p l e F i e l d " : " s a m p l e v a l u e " } }

我们有一个Spring MVC应用程序, 向我们的一个控制器执行POST请求。 POST请求中的字段通过请求参数填充到POJO中。从日志中我们可以看到字母之间没有空格。.我们正在将POJO直接传递给服务类中的Gson共享实例(许多请求和石英后台线程都使用该实例) 。 Gson转换器变量的实例化如下

Gson gsonMaker = new GsonBuilder().setDateFormat("MM dd, yyyy").create();

这是非常随机的(每100个案例中有1个案例)请求指针以进行观察。 我们将JSON输出存储在Oracle 11g数据库中。 从我在其他帖子和Google上的阅读来看,Gson似乎是线程安全的。

请帮助。

1 个答案:

答案 0 :(得分:1)

经过大量分析,发现问题出在ojdbc6驱动程序jar中。事实证明,驱动程序的CLOB字段有问题,并且仅在8000个字符时发生。 重现此问题的顺序如下。

  1. 使用CLOB列在Oracle中创建数据库表
  2. 精确地将8000个字符写入字符串。
  3. 将字符串数据插入CLOB字段。
  4. 使用resultset.getString(“ CLOB_FIELD”)读取插入的数据
  5. 在第4步中读取的数据现在将具有与NUL(\ u0000)字符交错的字符。

我们使用休眠模式的DAL正在获取CLOB数据并将其再次保存到DB中。这次将8000个字符重新写回数据库引发了混乱,可能是由于Gson造成的。

我想解决几个问题。

  1. 如果Hibernate实体使用@Lob注释(保存CLOB数据),为什么冬眠仍然选择将其读取为字符串,从而导致读取的数据损坏?休眠不应该处理这个问题吗?
  2. 此问题很少见,已在线程here中进行了讨论,但是我没有提及最新驱动程序的修复程序(我尚未针对最新驱动程序进行测试)。

希望人们发现此线程很有用。