我使用的是Spring Messaging和Spring Socket 4.0.5.RELEASE
。
我想向代理发送一条纯字符串消息。事实证明,这样的字符串是转义的,例如,在服务器端执行以下操作时:
private MessageSendingOperations<String> messagingTemplate;
messagingTemplate.convertAndSend("/app/someendpoint", "This is a String with a quotation mark: \". ");
则订阅的STOMP客户端接收到以下消息:
<<< MESSAGE
content-type:application/json;charset=UTF-8
subscription:sub-0
message-id:l6dvrpro-3
destination:/app/someendpoint
content-length:46
"This is a String with a quotation mark: \". "
因此,有效负载包括引号和转义引号。
如何发送未转义的“普通”字符串?
发布于 2014-06-23 20:49:22
因此,您不希望将消息转换为JSON。
如果您的所有消息都需要它,请重写WebSocketMessageBrokerConfigurer.configureMessageConverters()
以从active MessageConverter
列表中排除JSON转换器:
@Override
public boolean configureMessageConverters(List<MessageConverter> converters) {
converters.add(new StringMessageConverter());
return false; // Prevent registration of default converters
}
如果您只需要将其用于此消息,请尝试手动指定其内容类型:
messagingTemplate.convertAndSend(
"/app/someendpoint",
"This is a String with a quotation mark: \". ",
Collections.singletonMap("content-type", "text/plain");
发布于 2014-06-24 18:45:54
丑陋,但至少它是工作的,并且不需要任何特定的WebSocketMessageBrokerConfigurer
配置:
String payload = "This is a String with a quotation mark: \". ";
byte[] decodedPayload = message.getBytes();
Map<String, Object> headers = new HashMap<>();
headers.put("content-type", "text/plain");
// alternatively, a JSON content type also works fine, e.g. when you need to send adhoc-generated custom JSON payloads: headers.put("content-type", "content-type:application/json;charset=UTF-8");
GenericMessage<byte[]> message = new GenericMessage<>(decodedPayload, headers);
messagingTemplate.send("/app/someendpoint", message);
https://stackoverflow.com/questions/24365753
复制相似问题