Expand Authors Top

If you have a few years of experience in the Java ecosystem and you’d like to share that with the community, have a look at our Contribution Guidelines.

November Discount Launch 2022 – Top
We’re finally running a Black Friday launch. All Courses are 30% off until next Friday:

>> GET ACCESS NOW

Expanded Audience – Frontegg – Security (partner)
announcement - icon User management is very complex, when implemented properly. No surprise here.

Not having to roll all of that out manually, but instead integrating a mature, fully-fledged solution - yeah, that makes a lot of sense.
That's basically what Frontegg is - User Management for your application. It's focused on making your app scalable, secure and enjoyable for your users.
From signup to authentication, it supports simple scenarios all the way to complex and custom application logic.

Have a look:

>> Elegant User Management, Tailor-made for B2B SaaS

NPI – Lightrun – Spring (partner)

We rely on other people’s code in our own work. Every day. It might be the language you’re writing in, the framework you’re building on, or some esoteric piece of software that does one thing so well you never found the need to implement it yourself.

The problem is, of course, when things fall apart in production - debugging the implementation of a 3rd party library you have no intimate knowledge of is, to say the least, tricky. It’s difficult to understand what talks to what and, specifically, which part of the underlying library is at fault.

Lightrun is a new kind of debugger.

It's one geared specifically towards real-life production environments. Using Lightrun, you can drill down into running applications, including 3rd party dependencies, with real-time logs, snapshots, and metrics. No hotfixes, redeployments, or restarts required.

Learn more in this quick, 5-minute Lightrun tutorial:

>> The Essential List of Spring Boot Annotations and Their Use Cases

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.

November Discount Launch 2022 – Bottom
We’re finally running a Black Friday launch. All Courses are 30% off until next Friday:

>> GET ACCESS NOW

Generic footer banner
Comments are closed on this article!