Parcourir la source

update redis序列化方式改为jackson,与http保持一致
fix ws返回数据置为json

A17404李放 il y a 3 ans
Parent
commit
44039d3ea5

+ 12 - 6
coffee-common/src/main/java/com/coffee/common/config/websocket/DefaultMessageListener.java

@@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSON;
 import cn.hutool.json.JSONUtil;
 import com.coffee.common.config.websocket.handler.TopicWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.connection.Message;
@@ -27,17 +29,21 @@ public class DefaultMessageListener implements MessageListener {
     private final String id;
     private final Set<ChannelContext> channelContexts;
     private final TopicWrapper topicWrapper;
-
+    private final ObjectMapper objectMapper;
 
     @Override
     public void onMessage(Message message, byte[] pattern) {
         if (CollectionUtil.isNotEmpty(channelContexts)) {
             channelContexts.parallelStream()
-                    .forEach(channel -> Tio.send(channel,
-                            WsResponse.fromText(
-                                    JSONUtil.toJsonStr(MessageResponse.of(id,"result",topicWrapper.getParam(),JSONUtil.parse(message.toString()))),"utf-8"
-                            )
-                            )
+                    .forEach(channel -> {
+                        String json = null;
+                        try {
+                            json = objectMapper.writeValueAsString(MessageResponse.of(id, "result", topicWrapper.getParam(), JSONUtil.parse(message.toString())));
+                            Tio.send(channel,WsResponse.fromText(json,"utf-8"));
+                        } catch (JsonProcessingException e) {
+                            log.error("ws消息订阅,解析失败,message:【】",message.toString());
+                        }
+                            }
                     );
         }
     }

+ 7 - 2
coffee-common/src/main/java/com/coffee/common/config/websocket/handler/Subscribe.java

@@ -6,6 +6,8 @@ import com.coffee.common.bo.LoginUser;
 import com.coffee.common.config.websocket.DefaultMessageListener;
 import com.coffee.common.config.websocket.MessagingRequest;
 import com.coffee.common.config.websocket.WebSocketConstant;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataAccessException;
 import org.springframework.data.redis.connection.RedisConnection;
 import org.springframework.data.redis.core.RedisCallback;
@@ -26,9 +28,12 @@ import java.util.stream.Collectors;
  * @createTime 2022年03月25日 14:18:00
  */
 public abstract class Subscribe implements WsHandler {
-    @Resource
+    @Autowired
     private RedisTemplate<String,Object> redisTemplate;
 
+    @Autowired
+    private ObjectMapper objectMapper;
+
     public static final String SUBSCRIBE_TOPIC="subscribe-topic";
     /**
      * 存储主题与ws通道关联
@@ -87,7 +92,7 @@ public abstract class Subscribe implements WsHandler {
             redisTemplate.execute(new RedisCallback<Object>() {
                 @Override
                 public Object doInRedis(RedisConnection connection) throws DataAccessException {
-                    connection.pSubscribe(new DefaultMessageListener(getId(),channelContexts,topicWrapper),topicWrapper.getTopic().getBytes());
+                    connection.pSubscribe(new DefaultMessageListener(getId(),channelContexts,topicWrapper,objectMapper),topicWrapper.getTopic().getBytes());
                     redisConnectionMap.put(topicWrapper.getTopic(),connection);
                     return null;
                 }

+ 7 - 5
coffee-common/src/main/java/com/coffee/common/redis/RedisConfig.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
 import org.springframework.cache.annotation.EnableCaching;
@@ -24,8 +25,10 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
 @Configuration
 @EnableCaching
 @Slf4j
+@AllArgsConstructor
 public class RedisConfig extends CachingConfigurerSupport {
 
+    private final ObjectMapper objectMapper;
     @Bean
     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
@@ -34,15 +37,14 @@ public class RedisConfig extends CachingConfigurerSupport {
         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
 
 
-        ObjectMapper objectMapper = new ObjectMapper();
-        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
-        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
+//        ObjectMapper objectMapper = new ObjectMapper();
+//        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+//        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
 
         jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
 
-        FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
         // 设置value的序列化规则和 key的序列化规则
-        redisTemplate.setValueSerializer(fastJsonRedisSerializer);
+        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
         redisTemplate.setKeySerializer(new StringRedisSerializer());
 
         redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);

+ 2 - 0
coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceEntity.java

@@ -1,5 +1,7 @@
 package com.coffee.bus.entity;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse;
 import com.aliyuncs.iot.model.v20180120.QueryDeviceResponse;
 import com.baomidou.mybatisplus.annotation.*;

+ 1 - 0
coffee-system/src/main/java/com/coffee/bus/enums/ConfigEnum.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IEnum;
 import com.coffee.bus.bean.config.EvalConfig;
 import com.coffee.bus.bean.config.OtherConfig;
 import com.coffee.bus.bean.config.UndoConfig;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 

+ 16 - 1
coffee-system/src/main/java/com/coffee/bus/utils/WsPublishUtils.java

@@ -2,9 +2,17 @@ package com.coffee.bus.utils;
 
 import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.coffee.bus.entity.BusDeviceEntity;
+import com.coffee.bus.enums.DeviceTypeEnum;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
+import org.springframework.util.SerializationUtils;
 
 /**
  * @author lifang
@@ -15,10 +23,17 @@ import org.springframework.stereotype.Component;
  */
 @Component
 @AllArgsConstructor
+@Slf4j
 public class WsPublishUtils {
     private final RedisTemplate redisTemplate;
 
+    private final ObjectMapper objectMapper;
     public void publish(String topic,Object msg){
-        redisTemplate.convertAndSend(topic,JSONUtil.parse(msg));
+//        try {
+//            redisTemplate.convertAndSend(topic,objectMapper.writeValueAsString(msg));
+//        } catch (JsonProcessingException e) {
+//            log.error("ws消息发布,解析失败,推送消息:【】",msg.toString());
+//        }
+        redisTemplate.convertAndSend(topic,msg);
     }
 }

+ 0 - 1
coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java

@@ -414,7 +414,6 @@ public class DeviceInfoListener {
             }else {
                 handlePatient(device,newInfusion,cacheOperation);
             }
-            //todo 输注参数发生变化
             cacheOperation.add(()->{
                 deviceOperator.setInfusionParam(signHex);
                 return null;