Исключение Java и ошибка HTTP 500 - PullRequest
0 голосов
/ 22 мая 2018

Есть ли какое-либо отношение к исключениям Java на стороне сервера и к 500 коду ошибки http, который равен Internal Server Error.Это происходит из-за unhandled exceptions в catch блоке или из-за unchecked исключений, которые превышают runtime

Как я могу прийти к заключению, для меня, - этоApache Camel проект, который имеет spring-boot-starter-parent и имеет Spring Quartz Сконфигурированный внутри.В основном REST звонки через OAuth 1.0 проверки подлинности.

Я тестирую свое приложение с Swagger.Я не могу прийти к выводу, что

  1. OAuth 1.0 Аутентификация пройдена успешно или нет
  2. Подпрограммы обработчика ошибок не смогли захватить конкретную, - error code в проекте, так какunhandled и runtime exception в основном

Swagger дает следующий ответ с кодом ошибки 500.

"<Error><Message>An error has occurred.</Message><ExceptionMessage>Object reference not set to an instance of an object.</ExceptionMessage><ExceptionType>System.NullReferenceException</ExceptionType><StackTrace>   at API.ExecutionTimeFilterAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)&#xD;\n   at System.Web.Http.Filters.ActionFilterAttribute.OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)&#xD;\n--- End of stack trace from previous location where exception was thrown ---&#xD;\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()&#xD;\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xD;\n   at System.Web.Http.Filters.ActionFilterAttribute.&lt;CallOnActionExecutedAsync&gt;d__5.MoveNext()&#xD;\n--- End of stack trace from previous location where exception was thrown ---&#xD;\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()&#xD;\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xD;\n   at System.Web.Http.Filters.ActionFilterAttribute.&lt;ExecuteActionFilterAsyncCore&gt;d__0.MoveNext()&#xD;\n--- End of stack trace from previous location where exception was thrown ---&#xD;\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()&#xD;\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xD;\n   at System.Web.Http.Controllers.ActionFilterResult.&lt;ExecuteAsync&gt;d__2.MoveNext()&#xD;\n--- End of stack trace from previous location where exception was thrown ---&#xD;\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()&#xD;\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xD;\n   at System.Web.Http.Filters.AuthorizationFilterAttribute.&lt;ExecuteAuthorizationFilterAsyncCore&gt;d__2.MoveNext()&#xD;\n--- End of stack trace from previous location where exception was thrown ---&#xD;\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()&#xD;\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xD;\n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.&lt;SendAsync&gt;d__1.MoveNext()</StackTrace></Error>"

Даже с неправильным secret key, consumer key, этотот же сценарий.

Я предполагаю, что ключи являются неподходящими для обоих сценариев.

Однако я хотел бы знать, что

- это код ошибки 500, общий для необработанногоисключения и непроверенные исключения во время выполнения, или мы будем иметь 400 серии

Как я могу оценить сценарий тестирования, если возникнет код ошибки http (500), отличный от пользовательского кода ошибки java, который обрабатывался в коде и был получен ответобратно как часть строки ответа для REST вызовов.

1 Ответ

0 голосов
/ 22 мая 2018

Что вы можете сделать здесь, это добавить ExceptionHandler и отладить основную причину исключения.См .: http://www.baeldung.com/exception-handling-for-rest-with-spring ИЛИ http://zetcode.com/springboot/exceptionhandler/ ИЛИ http://www.springboottutorial.com/spring-boot-exception-handling-for-rest-services

Большинство фреймворков и библиотек (используемых для построения RESTful API) выдают ошибку 500 для любого необработанного (или времени выполнения)) исключение по умолчанию, и это только потому, что они не могут определить реальную бизнес-логику.

Но разработчик на стороне сервера должен обрабатывать любые необработанные (или во время выполнения) исключения и преобразовывать их в надлежащий код ответа HTTP в соответствии со стандартами REST API ИЛИ в соответствии с бизнес-сценариями использования.См. http://www.restapitutorial.com/httpstatuscodes.html для идеального сопоставления кодов ответов HTTP с вариантами использования.

PS Это все равно, что спросить: следует ли хранить набор целочисленных значений в массиве строк илив массиве целых чисел.Язык / Структура не требует этих мельчайших деталей, верно?(Я имею в виду, иногда они делают, скажем, Generics в Java, но есть предел:))

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