Запросы к «@MessageMapping» (с помощью WebSocket) не работаютJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Запросы к «@MessageMapping» (с помощью WebSocket) не работают

Сообщение Anonymous »

У меня проблема.
Я вместе с коллегой управляю фейковым приложением для знакомств . Я отвечаю за базу данных (через Java SpringBoot) и пытаюсь реализовать систему обмена сообщениями «один к одному» в реальном времени с помощью WebSocket.
Одна важная вещь заключается в том, что у меня действительно есть проблемы с пониманием того, как Вебсокет работает. Каждый ресурс, который я нахожу, дает большую часть объяснений как «очевидных», не объясняя «почему» за этими строками кода и так далее...
В любом случае, это WebSocketConfig

Код: Выделить всё

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/queue");
config.setUserDestinationPrefix("/user");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat-websocket").withSockJS();
}
}
А это контроллер сообщений:

Код: Выделить всё

@RestController
@RequestMapping("/chat")

@MessageMapping("/send")
public ResponseEntity sendMessage(@Valid @RequestBody NewMessage newMessage, Authentication auth) {
//my code here

try {
Chat chat = chatService.sendMessage(senderId, newMessage);
logger.debug("here the chat object vaffanculo:" + chat.toString());
messagingTemplate.convertAndSendToUser(
newMessage.getReceiverId().toString(), // destinatario
"/queue/messages", // coda dell'utente
chat // contenuto del messaggio
);

//other code here
}
Остальную часть кода контроллера я не писал по двум причинам:
  • Когда я преобразую его в PostMapping, и я просто пытаюсь отправить сообщение и сохранить его в базе данных, это работает.
  • Когда я меняю аннотацию от @PostMapping до @MessageMapping, и я пытаюсь сделать запрос на отправку сообщения, он говорит, что /app/send или /app/chat/send или /chat/send или что-то еще не существует.
Я пытался использовать Postman (поскольку во внешнем интерфейсе еще не реализован WebSocket, и я не могу его протестировать).
Как я уже сказал, если я использую его с @PostMapping и отправляю POST-запрос на localhost:8080/CHAT/SEND, это работает. Он отправляет сообщение о том, что оно сохранено в базе данных. Очевидно, что в качестве первого шага я мог бы использовать этот метод и попросить получателя «обновлять» страницу каждый раз, чтобы получить сообщение (если и когда мы сделаем демо-версию класса) благодаря реализованному мной методуchatHistory. Но, очевидно, мне бы хотелось, чтобы это работало так, как задумано: чат один на один в реальном времени).
Итак, когда я преобразую аннотацию в @MessageMapping, чтобы сделать он работает с WebSocket и отправляет сообщение получателю в реальном времени с помощью запроса POST, в нем говорится: «Путь не найден». Я пробовал /APP/SEND, /APP/CHAT/SEND, /CHAT/SEND, /CHAT/APP/SEND, но ничего не помогает.
Я знаю, что не стоит ПОПЫТАТЬСЯ, но я должен ЗНАТЬ, проблема в том, что я действительно не могу понять, как заставить это работать.
Я думаю, проблема может заключаться в том, что я отправляю запрос POST методу @MessageMapping, в то время как я должен отправить другой тип запроса, но я не знаю, как это сделать.
Или, может быть, мой веб-сокет не работает, и я не знаю, куда направлять свои запросы.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -dont-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»