Spring Redis pubsub:onMessage 回调数据操作不起作用

问题描述

我已经实现了 MessageListener 并像这样覆盖了 onMessage(..) 方法

 @Override
public void onMessage(Message message,byte[] pattern) {

    log.info("callback--- onMessage:{}",message.toString());

   // String msg=message.toString();
  //  if(Util.isProperjson(message.toString()))
    {
        String msg=new String(message.toString()); //new String(message.getBody(),StandardCharsets.UTF_8);
        JSONObject eventInfoJson= new JSONObject(msg);
       EmailInfo eventInfo=Util.getDeserializedobj(eventInfoJson,EmailInfo.class);


        googleCalendarService.createGoogleCalendarEvent(eventInfo);
    }

当我打印 message.toString 或将 message.getBody() 的 byteArray 转换为字符串时,我得到了正确的 jsonString。但是,当我尝试将其转换为 jsonObject 以反序列化为对象时,我收到错误消息,指出它不是有效的 json 字符串,尽管它是有效的,因为我将字符串复制到另一个位置并转换为 JSONObject 没有任何问题。我正在使用 org.json 转换为 JSONObject。我的控制台字符串数据:

"{\"cc\":[\"email1\",\"emai2\"],\"meetingName\":\"string\",\"meetingPlace\":\"string\",\"subject\":\"string\",\"recipient\":[\"string\"],\"description\":\"string\",\"startTime\":{\"dayOfWeek\":\"THURSDAY\",\"month\":\"FEBRUARY\",\"hour\":12,\"dayOfYear\":35,\"year\":2021,\"dayOfMonth\":4,\"monthValue\":2,\"nano\":102000000,\"chronology\":{\"calendarType\":\"iso8601\",\"id\":\"ISO\"},\"minute\":0,\"second\":20},\"endTime\":{\"dayOfWeek\":\"THURSDAY\",\"minute\":30,\"body\":\"string\",\"projectName\":\"string\"}";

错误日志:

2021-02-03 16:15:54.855 ERROR o.s.d.r.l.adapter.MessageListenerAdapter - 侦听器执行失败 org.json.JSONException: JSONObject 文本必须以 '{' at 1 [character 2 line 1] 开头 在 org.json.JSONTokener.SyntaxError(JSONTokener.java:507) 在 org.json.JSONObject.(JSONObject.java:222) 在 org.json.JSONObject.(JSONObject.java:406) 在 com.tigerit.soa.redis.RedisMessageSubscriber.onMessage(RedisMessageSubscriber.java:41) 在 org.springframework.data.redis.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:297) 在 org.springframework.data.redis.listener.RedisMessageListenerContainer.executeListener(RedisMessageListenerContainer.java:250) 在 org.springframework.data.redis.listener.RedisMessageListenerContainer.processMessage(RedisMessageListenerContainer.java:240) 在 org.springframework.data.redis.listener.RedisMessageListenerContainer.lambda$dispatchMessage$0(RedisMessageListenerContainer.java:986) 在 java.lang.Thread.run(Thread.java:745)

在这里遗漏了什么:(?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)