【问题标题】:Illegal character (CTRL-CHAR, code 0) - Parsing Exception非法字符(CTRL-CHAR,代码 0) - 解析异常
【发布时间】:2020-10-14 18:51:14
【问题描述】:

我现在遇到了

JsonParseException: Illegal character ((CTRL-CHAR, code 0)): only regular white space (\r, \n, \t) is allowed between tokens
 at [Source: (String)"    ){"BusinessDate"

这是因为营业日期之前的')',并且在此之前有四个NUL,但是它们没有出现在这里,因为它们是虚构的字符。那是我试图映射到我的对象的 json 字符串的开头。我只是发送一个序列化为 Avro 的 ByteArray,并尝试使用 ByteArray Deserializer 进行反序列化(我假设这是问题所在)。如何摆脱那些虚构的字符,使其正确映射到我的对象,或更改我的 SCS 消费者配置以仅在那个消费者上使用 Avro 反序列化。

  // External topic listener
    @StreamListener(ChannelsScheduler.SCHEDULER_IN_FROM_EXTERNAL_EVENT)
    public void consumeMessage(@Payload GenericMessage<String> message) throws IOException
    {
        logger.info("Consumed message from external topic: {}", message);

我试过了

        GPTMStatus gptmStatus = mapper.readValue(message.getPayload(), GPTMStatus.class);
        GPTMStatus gptmStatus = mapper.readValue(message.getPayload().trim(), GPTMStatus.class);
        GPTMStatus gptmStatus = mapper.readValue(message.getPayload().replace(")", ""), GPTMStatus.class);


String json = StringUtils.newStringUtf8(message.getPayload().getBytes(StandardCharsets.UTF_8));

        GPTMStatus gptmStatus = mapper.readValue(json, GPTMStatus.class);

所有三个都收到与上述相同的错误。

全部负载:

"    ){"BusinessDate":"2020-03-05","ContentUri":"20180712_EOB/1583443159984/0.xml","DFReference":"80712_EOB","DFRevision":0,"DFVersion":1583443159984}"

这就是我发送消息的方式:

          kafka
              .send(
                  destination,
                  formatter.transform(df.getCanonicalPayload()).getBytes(StandardCharsets.UTF_8))
              .get();

【问题讨论】:

  • 你能添加示例JSON有效载荷吗?我了解到您的有效载荷是 String - message.getPayload().trim()

标签: java jackson deserialization spring-kafka spring-cloud-stream


【解决方案1】:

这条线有点误导(至少对我来说)

String json = StringUtils.newStringUtf8(message.getPayload().getBytes(StandardCharsets.UTF_8));

JSON CAN 包含NULL 控制字符,但前提是它被转义并在字符串字段中。我建议从简单的json.replace("\0", ""); 开始,然后检查您的代码是否有任何进展。

【讨论】:

  • 感谢您的回答,我会检查一下,这些只是我尝试过的没有奏效的东西。
猜你喜欢
  • 2020-12-15
  • 1970-01-01
  • 2012-08-17
  • 2014-09-10
  • 2011-06-18
  • 2019-04-28
  • 1970-01-01
  • 2017-01-02
相关资源
最近更新 更多