首页 > 解决方案 > 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\",\"month\":\"FEBRUARY\",\"hour\":12,\"dayOfYear\":35,\"year\":2021,\"dayOfMonth\":4,\"monthValue\":2,\"nano\":102000000,\"chronology\":{\"calendarType\":\"iso8601\",\"id\":\"ISO\"},\"minute\":30,\"second\":20},\"body\":\"string\",\"projectName\":\"string\"}";

错误日志:

2021-02-03 16:15:54.855 错误 osdrladapter.MessageListenerAdapter - 侦听器执行失败 org.json.JSONException:JSONObject 文本必须在 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.RedisMessageListenerContainer.executeListener(RedisMessageListenerContainer.java:250) 在 org.springframework.data.redis.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:297)。 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)

我在这里想念什么:(?

标签: javaspring-bootpublish-subscribespring-data-redis

解决方案


推荐阅读