컨트롤러에서 @DetinationVariable 적용
@MessageMapping("/chat")
@SendTo("/sub/chat")
public ChatMessageResponse sendMessage(ChatMessageRequest request) {
return new ChatMessageResponse(request.sender(), request.content());
}
@MessageMapping("/chat.{chatRoomId}")
@SendTo("/sub/chat.{chatRoomId}")
public ChatMessageResponse sendMessage(ChatMessageRequest request, @DestinationVariable Long chatRoomId) {
//@DestinationVariable 애노테이션으로 받아서 처리 가능
//(@PathVariable 느낌으로 사용 가능)
return new ChatMessageResponse(request.sender(), request.content());
}
@ControllerAdvice
@RequiredArgsConstructor
public class WebSocketExceptionHandler {
@MessageExceptionHandler
// @SendToUser("/errors") /user/errors를 구독한 사용자에게 1대1로 메세지 전송
public CustomErrorResponse handleCustomException(CustomException exception) {
return new CustomErrorResponse(exception.getErrorCode(), exception.getMessage());
}
}
* ChannelIntercepter를 이용해 WebSocket 메시지 전송 전, 전송 후 할 일을 설정 가능
ex) 구독 요청 메시지가 올 때, 인가를 처리