vertical managers manager layouts java spring header stomp spring-websocket

managers - swing java layout



Cabeceras Stomp personalizadas que utilizan Springsocket Spring (1)

StompHeaderAccessor extiende NativeMessageHeaderAccessor que parece ser donde viven los encabezados que no son Stomp, excepto que están todos almacenados en un único encabezado llamado nativeHeaders, que en sí es un mapa.

@MessageMapping("/hello") @SendTo("/topic/greetings") public GenericMessage<Greeting> greeting(HelloMessage message) throws Exception { Map<String, List<String>> nativeHeaders = new HashMap<>(); nativeHeaders.put("hello", Collections.singletonList("world")); Map<String,Object> headers = new HashMap<>(); headers.put(NativeMessageHeaderAccessor.NATIVE_HEADERS, nativeHeaders); return new GenericMessage<Greeting>(new Greeting("Hello, " + message.getName() + "!"), headers); }

Un simple interceptor del lado del servidor para envolver sus encabezados personalizados al encabezado de nativeHeaders debería ser suficiente para exponerlos en el lado del cliente donde estarían disponibles como un mapa message.headers.nativeHeaders. Del mismo modo, puede escribir un interceptor del lado del cliente para mover los hablantes nativos a los encabezados normales, por lo que antes de que su cliente conozca el mensaje, todos los encabezados esperados están simplemente en el mensaje.

Tengo una aplicación de websocket de primavera básica que actualmente envía datos básicos a los suscriptores. Actualmente, el sistema usa la clase SimpMessageSendingOperations como manejador de mensajes. Si llamo a SimpMessageSendingOperations.convertAndSend(destination, object) , el objeto es convertido y recibido por los clientes suscritos.

Me gustaría poder enviar un encabezado personalizado a los clientes. He intentado usar el SimpMessageSendingOperations.convertAndSend(destination, object, headers) para hacer esto. Sin embargo, el encabezado personalizado no está incluido en el mensaje de stomp.

Depurando a través del código, parece que el método StompHeaderAccessor.toStompHeaderMap() llama a toNativeHeaderMap() que usa el encabezado nativo y los mapas de encabezado nativos originales para compilar los encabezados de stomp.

¿Hay alguna forma de agregar un encabezado personalizado al mensaje de stomp?