Spring Top

Get started with Spring 5 and Spring Boot 2, through the reference Learn Spring course:

>> LEARN SPRING

1. Overview

In this article, we'll create an application with WebSocket and test it using Postman.

2. Java WebSockets

WebSocket is a bi-directional, full-duplex, persistent connection between a web browser and a server. Once a WebSocket connection is established, the connection stays open until the client or server decides to close this connection.

The WebSocket protocol is one of the ways to make our application handle real-time messages. The most common alternatives are long polling and server-sent events. Each of these solutions has its advantages and drawbacks.

One way of using WebSockets in Spring is using the STOMP subprotocol. However, in this article, we'll be using raw WebSockets because, as of today, STOMP support is not available in Postman.

3. Postman Setup

Postman is an API platform for building and using APIs. When using Postman, we don't need to write an HTTP client infrastructure code just for the sake of testing. Instead, we create test suites called collections and let Postman interact with our API.

4. Application Using WebSocket

We'll build a simple application. The workflow of our application will be:

  • The server sends a one-time message to the client
  • It sends periodic messages to the client
  • Upon receiving messages from a client, it logs them and sends them back to the client
  • The client sends aperiodic messages to the server
  • The client receives messages from a server and logs them

The workflow diagram is as follows:

 

5. Spring WebSocket

Our server consists of two parts. Spring WebSocket events handler and Spring WebSocket configuration. We'll discuss them separately below:

5.1. Spring WebSocket Config

We can enable WebSocket support in the Spring server by adding the @EnableWebSocket annotation.

In the same configuration, we'll also register the implemented WebSocket handler for the WebSocket endpoint:

@Configuration
@EnableWebSocket
public class ServerWebSocketConfig implements WebSocketConfigurer {
    
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler(), "/websocket");
    }
    
    @Bean
    public WebSocketHandler webSocketHandler() {
        return new ServerWebSocketHandler();
    }
}

5.2. Spring WebSocket Handler

The WebSocket handler class extends TextWebSocketHandler. This handler uses the handleTextMessage callback method to receive messages from a client. The sendMessage method sends messages back to the client:

@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
    String request = message.getPayload();
    logger.info("Server received: {}", request);
        
    String response = String.format("response from server to '%s'", HtmlUtils.htmlEscape(request));
    logger.info("Server sends: {}", response);
    session.sendMessage(new TextMessage(response));
}

The @Scheduled method broadcasts periodic messages to active clients with the same sendMessage method:

@Scheduled(fixedRate = 10000)
void sendPeriodicMessages() throws IOException {
    for (WebSocketSession session : sessions) {
        if (session.isOpen()) {
            String broadcast = "server periodic message " + LocalTime.now();
            logger.info("Server sends: {}", broadcast);
            session.sendMessage(new TextMessage(broadcast));
        }
    }
}

Our endpoint for testing will be:

ws://localhost:8080/websocket

6. Testing with Postman

Now that our endpoint is ready, we can test it with Postman. To test WebSocket, we must have v8.5.0 or higher.

Before starting the process with Postman, we'll run our server. Now let's proceed.

Firstly, start the Postman application. Once it started we can proceed.

After it has loaded from the UI  choose new:

A new pop-up will be opened. From there choose WebSocket Request:

We'll be testing a raw WebSocket request. The screen should look like this:

Now let's add our URL. Press the connect button and test the connection:

So, the connection is working fine. As we can see from the console we are getting responses from the server. Let's try sending messages now and the server will respond back:

After our test is done, we can disconnect simply by clicking the Disconnect button.

7. Conclusion

In this article, we've created a simple application to test a connection with WebSocket and tested it using Postman.

Finally, the related code is available over on GitHub.

Spring bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

>> THE COURSE
Generic footer banner
guest
0 Comments
Inline Feedbacks
View all comments