From 21729484302ba5cf3d87cd7d77ab7d46ddab7ac5 Mon Sep 17 00:00:00 2001 From: John-Wiens Date: Thu, 16 May 2024 11:36:58 -0600 Subject: [PATCH] Added proper time serialization to stomp endpoints --- .../ode/api/controllers/StompController.java | 55 ++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/jpo-conflictvisualizer-api/src/main/java/us/dot/its/jpo/ode/api/controllers/StompController.java b/jpo-conflictvisualizer-api/src/main/java/us/dot/its/jpo/ode/api/controllers/StompController.java index 18a5c2845..2334c98b0 100644 --- a/jpo-conflictvisualizer-api/src/main/java/us/dot/its/jpo/ode/api/controllers/StompController.java +++ b/jpo-conflictvisualizer-api/src/main/java/us/dot/its/jpo/ode/api/controllers/StompController.java @@ -1,17 +1,23 @@ package us.dot.its.jpo.ode.api.controllers; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.messaging.handler.annotation.MessageMapping; -import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.simp.SimpMessagingTemplate; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Controller; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.ser.ZonedDateTimeSerializer; + import us.dot.its.jpo.conflictmonitor.monitor.models.bsm.BsmIntersectionIdKey; import us.dot.its.jpo.geojsonconverter.pojos.geojson.LineString; import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; import us.dot.its.jpo.geojsonconverter.pojos.spat.ProcessedSpat; -import us.dot.its.jpo.ode.api.models.LiveFeedSessionIndex; import us.dot.its.jpo.ode.model.OdeBsmData; @Controller @@ -20,6 +26,24 @@ public class StompController { @Autowired private SimpMessagingTemplate brokerMessagingTemplate; + private ObjectMapper mapper; + + StompController(){ + mapper = new ObjectMapper(); + mapper.registerModule(new JavaTimeModule()); + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_INSTANT; + ZonedDateTimeSerializer zonedDateTimeSerializer = new ZonedDateTimeSerializer(dateTimeFormatter); + + SimpleModule module = new SimpleModule(); + module.addSerializer(ZonedDateTime.class, zonedDateTimeSerializer); + mapper.registerModule(module); + + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true); + } + + + // @Scheduled(fixedRate = 10000) // Broadcast a message every second public void broadcastMessage(String topic, String message) { brokerMessagingTemplate.convertAndSend(topic, message); @@ -41,7 +65,13 @@ public void broadcastSpat(ProcessedSpat spat) { } if (intersectionID != -1) { - broadcastMessage(buildTopicName(-1, intersectionID, "spat"), spat.toString()); + try { + broadcastMessage(buildTopicName(-1, intersectionID, "spat"), mapper.writeValueAsString(spat)); + } catch (JsonProcessingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } } @@ -57,13 +87,24 @@ public void broadcastMap(ProcessedMap map) { } if (intersectionID != -1) { - broadcastMessage(buildTopicName(-1, intersectionID, "map"), map.toString()); + try { + System.out.println(mapper.writeValueAsString(map)); + broadcastMessage(buildTopicName(-1, intersectionID, "map"), mapper.writeValueAsString(map)); + } catch (JsonProcessingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } } public void broadcastBSM(BsmIntersectionIdKey key, OdeBsmData bsm) { if (key.getIntersectionId() != -1) { - broadcastMessage(buildTopicName(-1, key.getIntersectionId(), "bsm"), bsm.toString()); + try { + broadcastMessage(buildTopicName(-1, key.getIntersectionId(), "bsm"), mapper.writeValueAsString(bsm)); + } catch (JsonProcessingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } }