Имеет ли Java полное перечисление для кодов ответа HTTP?
Мне интересно, есть ли тип перечисления в некоторой стандартной библиотеке классов Java, которая определяет символические константы для всех допустимых кодов ответа HTTP. Он должен поддерживать преобразование в/из соответствующих целочисленных значений.
Я отлаживаю код Java, который использует javax.ws.rs.core.Response.Status. Он работает, но он определяет только половину действительных кодов ответа HTTP.
Ответы
Ответ 1
Я не думаю, что есть тот, который завершается в стандартных классах Java; HttpURLConnection
отсутствует довольно много кодов, таких как HTTP 100/Continue
.
Там полный список в Apache HttpComponents, хотя:
org.apache.http.HttpStatus
(заменено org.apache.commons.HttpClient.HttpStatus
из Apache Http Client, срок действия которого истек)
Ответ 2
Интерфейс javax.servlet.http.HttpServletResponse
из API сервлета имеет все коды ответов в виде имен констант int
SC_<description>
. См. http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html
Ответ 3
Ну, есть статические константы точных целочисленных значений в классе HttpURLConnection
Ответ 4
Если вы используете Spring, версия 3.x имеет то, что вы ищете:
http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html
Ответ 5
Использовать класс javax.servlet.http.HttpServletResponse
Пример:
javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED //401
javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR //500
Ответ 6
Если вы используете Netty, вы можете использовать:
Ответ 7
Кажется, что все игнорируют часть типа "перечисления" вашего вопроса.
Пока нет канонического источника для кодов состояния HTTP, есть простой способ добавить любые отсутствующие константы статуса, которые вам нужны, к тем, которые предоставляются javax.ws.rs.core.Response.Status
, без добавления каких-либо дополнительных зависимостей в ваш проект.
javax.ws.rs.core.Response.Status
- это только одна реализация интерфейса javax.ws.rs.core.Response.StatusType
. Вам просто нужно создать собственное перечисление для реализации с определениями для кодов состояния, которые вы хотите.
Основные библиотеки, такие как Javax, Jersey и т.д., записываются в интерфейс StatusType
не в реализацию Status
(или они, конечно, должны). Поскольку ваше новое перечисление состояния реализует StatusType
, его можно использовать в любом месте, где вы бы использовали константу javax.ws.rs.core.Response.Status
.
Просто помните, что ваш собственный код также должен быть записан в интерфейс StatusType
. Это позволит вам использовать ваши собственные коды состояния вместе со стандартными.
Вот суть с простой реализацией с константами, определенными для кодов статуса "Информационный 1xx": https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a
Ответ 8
Также проверьте класс состояния перезапуска:
http://www.restlet.org/documentation/1.1/api/org/restlet/data/Status.html
Ответ 9
1) Чтобы получить причину текст, если у вас есть только код, вы можете использовать:
org.apache.http.impl.EnglishReasonPhraseCatalog.INSTANCE.getReason(httpCode,null)
Где httpCode
будет кодом причины, который вы получили от ответа HTTP.
Подробнее см. https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.html
2) Чтобы получить причину кода, если у вас есть только текст, вы можете использовать BasicHttpResponse
.
Подробнее см. здесь: https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html
Ответ 10
Лучшим поставщиком констант кода статуса http, вероятно, будет класс Jetty org.eclipse.jetty.http.HttpStatus, потому что:
- В maven есть пакет javadoc, который важен, если вы ищете константу и знаете только номер → просто откройте страницу api docs и найдите номер
- константы содержат номер кода состояния.
Единственное, что я хотел бы улучшить: поставить код состояния перед текстовым описанием, чтобы сделать поиск автозаполнения более удобным, когда вы начинаете с кода.
Ответ 11
Другой вариант - использовать класс HttpStatus
из сообщества Apache commons-httpclient, который предоставляет вам различные статусы Http как константы.