事情的起因是这样的,之前完成了jsonb的类型转化器配置,在本地也可以正常运行了,结果上了服务器就出现乱码了。
- 本地
- 线上
明明代码都一样,偏偏 请求获得到的tags不一样
是不是数据库编码问题
这个问题非常好判断,在一次请求中的其它字符串成分都是正常的,说明问题不出在代码里。当然解决肯定是要用代码解决。
因此,怀疑是我的程序和数据库对接的转化器出了问题。
是不是转化器问题
确实如此,我们添加几段日志代码,分别在本地和线上运行进行对比。
找到了在程序中的分歧点,明明array对象的储值一样,但是转化出的字符串不一样,说明tags的asString字符串转化是有问题的,为了确认是不是这个原因,我们使用StrUtil的utf8str进行转化array对象进行尝试。
@ReadingConverter
public class JsonToJsonArray
implements Converter<Json, JSONArray> {
Logger log = LoggerFactory.getLogger(JsonToJsonArray.class);
@Override
public JSONArray convert(Json source) {
return JSONUtil.parseArray(StrUtil.utf8Str(source.asArray()));
}
}
问题成功解决,由此也可以推断出,Json的asString方法默认调用的编码格式应该是与系统有关的,我的收获是在进行除字符串以外的类型获取的字符串,都要定义编码格式,以免出现漏洞导致数据出现乱码。