没有使用 websocket 发送消息的枚举值

kon*_*Dos 7 java websocket spring-boot spring-websocket

我正在尝试使用 websockets 创建一个简单的聊天应用程序。我遵循了本教程: https: //www.baeldung.com/websockets-spring

这是我的配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
         registry.addEndpoint("/chat");
         registry.addEndpoint("/chat").withSockJS();
    }
}
Run Code Online (Sandbox Code Playgroud)
@Controller
public class WebSocketController {
    @MessageMapping("/chat")
    @SendTo("/topic/messages")
    public OutputMessage send(Message message) throws Exception {
        return new OutputMessage(message.getFrom(), message.getText(), Instant.now());
    }
}
Run Code Online (Sandbox Code Playgroud)
@Builder
@Getter
public class Message {
    private final String from;
    private final String text;
}

@Builder
@Getter
public class OutputMessage {
    private final String from;
    private final String text;
    private final Instant date;
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用Message请求模型发送消息。

在此输入图像描述

但最后我得到:

2022-01-02 11:17:30.438 ERROR 26412 --- [nio-8080-exec-7] o.s.w.s.m.StompSubProtocolHandler        : Failed to parse TextMessage payload=[{
    "fr..], byteCount=44, last=true] in session 49df8471-5fe9-d785-c4c9-5058a712bb9b. Sending STOMP ERROR to client.

java.lang.IllegalArgumentException: No enum constant org.springframework.messaging.simp.stomp.StompCommand.{
    at java.base/java.lang.Enum.valueOf(Enum.java:240) ~[na:na]
    at org.springframework.messaging.simp.stomp.StompCommand.valueOf(StompCommand.java:28) ~[spring-messaging-5.3.14.jar:5.3.14]
    at org.springframework.messaging.simp.stomp.StompDecoder.decodeMessage(StompDecoder.java:148) ~[spring-messaging-5.3.14.jar:5.3.14]
    at org.springframework.messaging.simp.stomp.StompDecoder.decode(StompDecoder.java:115) ~[spring-messaging-5.3.14.jar:5.3.14]
    at org.springframework.messaging.simp.stomp.BufferingStompDecoder.decode(BufferingStompDecoder.java:114) ~[spring-messaging-5.3.14.jar:5.3.14]
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageFromClient(StompSubProtocolHandler.java:252) ~[spring-websocket-5.3.14.jar:5.3.14]
Run Code Online (Sandbox Code Playgroud)

我应该发送一些允许解析消息的附加标头吗?我没主意了。

小智 11

我遵循相同的教程来理解 WebSockets,但遇到了完全相同的问题。我发现请求正文中的换行符导致了问题。您的请求正文必须是:

{"from": "test", "text": "test"}
Run Code Online (Sandbox Code Playgroud)

在我做出这个改变之后,它对我有用。