🔥 Secure your spot now and embark on your journey to becoming a Spring Boot master! Use promo code "EARLY_BIRD_30" during registration to enjoy this incredible 30% discount. Don't miss out on this opportunity! 🔥 Course link: aliboucoding.com/p/spring-boot-in-depth?coupon_code=EARLY_BIRD_30&product_id=4985811
Thank you very much for this amazing demo. I only have one observation, every time a user connects you can see in the spring log the message "WebSocketAnnotationMethodMessageHandler : Unhandled exception from message handler method" Caused by: java.lang.IllegalArgumentException: Expected destination pattern "/user/{userId }/**". I don't know if it's something from the front or the back but I'm going to check it out. However the application works. Thanks Ali!
In your WebSocketConfig.java class at line number 24, Alibou forget to add complete path. Remove this line=> registry.setUserDestinationPrefix("/user"); Add this line=> registry.setUserDestinationPrefix("/user/{userId}/**"); And now you won't get any error. Program executes and output comes smoothly too.
Thank you very much, I've always wanted to create websockets in some of my applications without success. I'm really happy to have seen this video and I'm learning a lot by following your courses. I'm interested in an Angular websocket implementation. 😇
Hi Ali! I want to thank you for this content!!! It brings up a lot of insight and cool tips that are helping me, all the little details like breaking lines or getting back and forth between the modules explained really sets your content appart.Keep up the good work!! I'll be happily waiting for the angular or react implementation, mainly because of the curiosity of your code design approach!!
Thanks for the tutorial. Just some points that aren't needed. You don't have to register the default message converter. All json messages are converted to and from objects, just like in @RestController with requestbody, without any configuration. Also the @payload annotation is not needed.
In min 32 you retrieve a Optional of class user and there is no point in throwing null if its empty. In if statement that follows in my opinion it should be isPresentCheck because current implementation is prone to null pointer exception and does not use the advantages of Optional. But anyways a great tutorial. Currently going through it with my chat app project. Thanks!
Its one of the best video and highly appreciated the efforts you put .can you make a full stack real world application type following react with springboot using all industry best practices with advanced Libraries?
Thank you very much, WebSocket chats in applications interest me a lot, however it is possible that you make a video in which a project done in nestjs for the backend, angular for the frontend and MongoDb for the database. THANKS
This is good for initial leraning concepts, But How this Queue bases architecture scale when we have millions of users ? Will we create queue for each user?
Hey i downloaded your source code and did mvnw clean install. Now it says 'Build Success', but it doesn't run in my browser. How should i do that ? I want to show this project in my school. I don't have a mongodb, i have a mysql !
Hi, thank you for this tutorial! I have a question. You currently do it in a "monolithic" style by serving html from the server. How would you do it in REST API style? Like when you have React frontend independent from the backend?
I'd love to follow the Angular tutorial for this! Thank you! Also, next time, can you explain a little more about stomp, broker and stuff... I a newbie to WS and I don't really understand that
Hi Bouali, Thanks for the tutorial, I am just wondering if there is a way to work around the exception message indicating an IllegalArgumentException caused by an expected destination pattern of "/user/{userId}/**". I tried a few things but it didn't work. edit: To fix it I had to add another prefix registry.enableSimpleBroker("/user", "/topic"); and change the javascript subscribe and UserController, not sure if this would be the best approach tho.
Hello, can we implement the Spring security to this app? Is it hard? I really need to make an authenticated users and provide secure messaging chat app. Thank You!
there tons of security videos in my channel. Follow carefully and you will be able to implement it yourself. Otherwise wait for the coming videos and you will get your answer
@@BoualiAli secure websocket though microservice . is that possible ? i am facing CORS error and it's quite impossible for me to sort it out no information over internet even nothign i can found into spring documentation too
Hello, please, help me, When starting a project Caused by: java.lang.IllegalArgumentException: Expected destination pattern "/user/{userId}/**" And org.springframework.messaging.MessageDeliveryException: Failed to handle GenericMessage [payload=byte[58], The project is completely copied
@@sebastiane.r.4195 Hey Guys, I think I have this one figured out. I ran into it as well. (Someone correct me if I am wrong) So the reason this seems to be happening is because in the WebsocketConfig.java we are doing this: registry.enableSimpleBroker("/user"); Now it seems like Spring Boot expects specific destination patterns by default, so since we only registered the one endpoint and the one we used happened to use was "/users". When we try to hit the controller endpoint "/user.addUser" from the client we are point to @SendTo("/user/public") as the endpoint to send to. And SpringBoot sees this and thinks. Um... that doesn't look right, the endpoints going to "/user" should look like this: "/user/{userId}/**" To fix this error from popping up, i just created a new endpoint for the non-user specific public broadcast endpoints. So In the config i replaced the original with this: registry.enableSimpleBroker("/chatbroadcast","/user"); now we have two broker endpoints, and we can use the new endpoint name instead of /user when calling the @sendto in the controller. like this: @MessageMapping("/user.addUser") @SendTo("/chatbroadcast/public") public User addUser(@Payload User user){ userService.saveUser(user); return user; } @MessageMapping("/user.disconnectUser") @SendTo("/chatbroadcast/public") public User disconnectUser(@Payload User user){ userService.disconnect(user); return user; } And dont forget you have to change this in the main.js also function onConnected() { stompClient.subscribe(`/user/${nickname}/queue/messages`, onMessageReceived); stompClient.subscribe(`/chatbroadcast/public`, onMessageReceived); ---- I Modified this from "/user" to "/chatbroadcast" Also, i just called it chatbroadcast, because i needed to call it something. The name doesnt matter.(well, unless i picked a name that also happened to be some kind of default, lol) Hope this helps, it fixed it for me.
In your WebSocketConfig.java class at line number 24, Alibou forget to add complete path. Remove this line=> registry.setUserDestinationPrefix("/user"); Add this line=> registry.setUserDestinationPrefix("/user/{userId}/**"); And now you won't get any error. Program executes and output comes smoothly too.
@@BoualiAliHere after going through your previous video. I must say that both of your videos lack explanation. You are mostly reading the code you are going to write. You are not explaining why you are doing these things in the first place. It's like you have some other window opened with the full code and you are just copying and writing into this project. Please try to explain more in detail for the next upcoming React.js front end video with Web socket. Looking forward to it sir.
Hi, thank you for this tutorial! I have a question. You currently do it in a "monolithic" style by serving html from the server. How would you do it in REST API style? Like when you have Angular frontend independent from the backend?
Anyone getting an error while doing connection using stompClient? Failed to load resource: the server responded with a status of 404 Whoops! Lost connection to the server. Any fix for this?
I tried to use MYSQL for it but I am getting this error when I tried to make a chat "ChatMessage' must be manually assigned before calling 'persist()',". This error is actually from the ChatMessage Entity. please how can I resolve it?
Hi friend, thank you very much for share your knowledge with us! I have a question here. When you say you organize the app by domain, does it mean that you are applying DDD?
Thank you very much for the clear explanation !! I'm looking forward for the Angular Implementation (meanwhile I'll make an attempt on my own after learning Angular from your tutorials )
Hi! Thanks for this wonderful guide, now i have spring security configured in my application and i am using JWT authentication (bearer token). and because of this, i am getting a 404. how do i fix this?
Thank you Bouali!I learn a lot from your video! I am just curious that if there is group chat video later, so that I can create multiple groups and keep the message in their own group channel, I will explore by myself first, but really looking forward to seeing your next video! Really appreciate your working!
Excuse me ! How can you call the GetMapping inside the same controller with MessageMapping I have tried several times but it not working, and how can you display user login logout real-time, hope you'll answer. Thanks!
@@BoualiAli i just want to share this thing with you sir. i am creating an Instagram's clone in vue.js as front end spring-boot as backend and i was stuck around building chat function.Your previous video was very help-full but this one is soo amazing i never worked with websocket but your explanation was sufficient for me thank you
Sir, I am using a MySQL database. The chat application runs successfully, but it have not create a table in the database.The database connection is correct; I am using the application.properties file.The UI page displays a successful login page, but the input box is not showing. What could be the problem, sir?
I am having similar issue, though mine created the table successfully but when I tried to send a message to another user, the thing returns back to the login page with this error that says websocket.chat.entities.room.ChatRoom' must be manually assigned before calling 'persist()'. I don't know how to resolve it. I am using MYSQL also
hello ali I am currently clone coding your chatapp, but my mongodb can't get nickname and real name, and server error 500 shows up, saying Uncaught (in promise) TypeError: connectedUsers.filter is not a function at findAndDisplayConnectedUsers (main.js:50:37) what should I do? and thx for the video