Получить байты сообщения в @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".

Другие вопросы по тегам