Получить байты сообщения в @MessageExceptionHandler - PullRequest
0 голосов
/ 28 июня 2018

У меня есть типичная конечная точка Spring, которая служит темой Websocket для отправки сообщений (как можно увидеть в примерах на Отправка сообщения об ошибке в Spring websockets ).

Для обработки искаженных сообщений, которые невозможно проанализировать, я создал

@MessageExceptionHandler()
public void errorHandler(Exception e, @Headers Map<String, Object> headers) {
    LOGGER.error("Bad Packet received: ", e);
}

Однако мне нравится иметь байтовый массив с исходным искаженным сообщением, чтобы я мог видеть, что именно было не так. Как я могу получить это?

1 Ответ

0 голосов
/ 28 июня 2018

Тип исключения работает как связанный список исключений. Я реализовал подобный метод, чтобы получить именно то исключение, которое инициировало исключения.

@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".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...