Получить байты сообщения в @MessageExceptionHandler
У меня есть типичная конечная точка Spring, которая служит темой Websocket для отправки сообщений (как можно увидеть в примерах в сообщении об ошибке отправки в Spring websockets).
Для обработки искаженных сообщений, которые невозможно проанализировать, я создал
@MessageExceptionHandler()
public void errorHandler(Exception e, @Headers Map<String, Object> headers) {
LOGGER.error("Bad Packet received: ", e);
}
Однако мне нравится иметь байтовый массив с исходным искаженным сообщением, чтобы я мог видеть, что именно было не так. Как я могу получить это?
1 ответ
Тип исключения работает как связанный список исключений. Я реализовал подобный метод, чтобы получить именно то исключение, которое инициировало исключения.
@ExceptionHandler({ Exception.class })
public @ResponseBody String handleException(Exception ex) {
Throwable cause = getContaExceptionIfExists(ex);
return getMessageFromException(cause.getMessage());
}
public String getMessageFromException(String message) {
return StringUtils.substringBetween(message , "interpolatedMessage='", "'");
}
public Throwable getContaExceptionIfExists(Exception ex) {
Throwable cause = ex;
do
{
if (cause instanceof ContaExcepetion)
{
return cause;
}
cause = cause.getCause();
}
while (cause != null);
return ex;
}
Этот пример кода обрабатывает все исключения в моем проекте. И я проверяю, есть ли исключения с типом "ContaExcepetion".