Как обработать исключение и отправить ошибку клиенту SSEJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как обработать исключение и отправить ошибку клиенту SSE

Сообщение Anonymous »

Я работаю с SSE, используя реализацию Spring SseEmitter.
В моем случае я хочу обработать ошибку, когда проект не был найден на стороне сервера, и отправить событие с сообщением об ошибке.
Моя первая идея заключалась в том, чтобы вызвать исключение из метода службы, а затем обработать его через @ExceptionHandler в классе, помеченном @ControllerAdvice. Это не сработало, поскольку класс @ControllerAdvice ничего не знает о клиенте SSE.
После этого я попробовал следующий код:

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

private void sendError(String message, int status) {
log.error("Processing report {} stopped with error '{}'", getContextLogMessage(), message);
sseEmitter.completeWithError(new ApiError(message, HttpStatus.resolve(status)));
sseEmitter.onCompletion(this::stopSelf);
}
Но клиент SSE получил следующее сообщение:

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

Received error
Event { type: 'error', status: 500, message: '' }
Похоже, что сообщение об ошибке Spring по умолчанию было доставлено клиенту SSE.
Код моего клиента SSE:

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

const EventSource = require('eventsource')
const eventSource = new EventSource('http://localhost:8080/testing')

eventSource.onmessage = (e) => {
const data = JSON.parse(e.data)
if (data.status == null) {
console.log(data)
} else if (data.status === 'DONE') {
console.log(data.status);
eventSource.close()
} else {
console.log('status = ' + data.status)
}
}

eventSource.onerror = (e) => {
console.log('Received error')
console.log(e)
eventSource.close()
}
Мой вопрос: существует ли какая-либо возможность справиться с этим через @ExceptionHandler или нет? Возможно, я что-то неправильно понял в Spring SSE, раньше я использовал только sseEmitter.send().

Подробнее здесь: https://stackoverflow.com/questions/701 ... sse-client
Ответить

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

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

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

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

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