首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Spring的MessageSendingOperations发送未转义的纯字符串?

如何使用Spring的MessageSendingOperations发送未转义的纯字符串?
EN

Stack Overflow用户
提问于 2014-06-23 20:18:26
回答 2查看 1.7K关注 0票数 0

我使用的是Spring Messaging和Spring Socket 4.0.5.RELEASE

我想向代理发送一条纯字符串消息。事实证明,这样的字符串是转义的,例如,在服务器端执行以下操作时:

代码语言:javascript
运行
复制
private MessageSendingOperations<String> messagingTemplate;
messagingTemplate.convertAndSend("/app/someendpoint", "This is a String with a quotation mark: \". ");

则订阅的STOMP客户端接收到以下消息:

代码语言:javascript
运行
复制
<<< 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: \". " 

因此,有效负载包括引号和转义引号。

如何发送未转义的“普通”字符串?

EN

回答 2

Stack Overflow用户

发布于 2014-06-23 20:49:22

因此,您不希望将消息转换为JSON。

如果您的所有消息都需要它,请重写WebSocketMessageBrokerConfigurer.configureMessageConverters()以从active MessageConverter列表中排除JSON转换器:

代码语言:javascript
运行
复制
@Override
public boolean configureMessageConverters(List<MessageConverter> converters) {
    converters.add(new StringMessageConverter());
    return false; // Prevent registration of default converters
}

如果您只需要将其用于此消息,请尝试手动指定其内容类型:

代码语言:javascript
运行
复制
messagingTemplate.convertAndSend(
    "/app/someendpoint", 
    "This is a String with a quotation mark: \". ",
    Collections.singletonMap("content-type", "text/plain");
票数 1
EN

Stack Overflow用户

发布于 2014-06-24 18:45:54

丑陋,但至少它是工作的,并且不需要任何特定的WebSocketMessageBrokerConfigurer配置:

代码语言:javascript
运行
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24365753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档