Partner – Microsoft – NPI (cat= Spring)
announcement - icon

Azure Spring Apps is a fully managed service from Microsoft (built in collaboration with VMware), focused on building and deploying Spring Boot applications on Azure Cloud without worrying about Kubernetes.

And, the Enterprise plan comes with some interesting features, such as commercial Spring runtime support, a 99.95% SLA and some deep discounts (up to 47%) when you are ready for production.

>> Learn more and deploy your first Spring Boot app to Azure.

You can also ask questions and leave feedback on the Azure Spring Apps GitHub page.

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:

 

p1

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:

postman ws1

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

postman ws2

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

postman ws3

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

postman ws4

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:

postman ws5

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.

Course – LS (cat=Spring)

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

>> THE COURSE
res – Junit (guide) (cat=Reactive)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.