在我的API响应中,我有control-p字符。 Jackson解析器无法序列化角色并抛出错误
com.fasterxml.jackson.core.JsonParseException:非法引用 character((CTRL-CHAR,code 16)):必须使用反斜杠进行转义 包含在字符串值
中
我调查过并发现Jackson库实际上试图捕获ctrl-char。
有人可以建议解决方案或解决此问题吗?提前谢谢。
答案 0 :(得分:2)
您是否尝试配置映射器以强制转义非ASCII?
这可能就足够了:
mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
但我同意StaxMan:JSON响应应格式正确。
答案 1 :(得分:2)
我能够通过在JsonParser上设置Feature.ALLOW_UNQUOTED_CONTROL_CHARS(documentation)来修复类似的问题
我的案例中的代码看起来是:
parser.setFeatureMask(parser.getFeatureMask() | JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS.getMask());
正如其他人所说,这样的JSON无效,但如果你没有机会改变JSON,这应该会有所帮助。
答案 2 :(得分:0)
你得到的内容是无效的JSON - 根据JSON规范,控制字符必须在字符串值中转义,并且不能存在于它们之外。所以我建议修改输入数据;它是腐败的,无论谁发送它都不能很好地清理它或正确逃脱。
除此之外,您可以编写一个过滤掉或转换所述控制字符的Reader
(甚至InputStream
)。