Мне интересно, есть ли тип enum в некоторой стандартной библиотеке классов Java, который определяет символические константы для всех допустимых кодов ответов HTTP. Он должен поддерживать преобразование в / из соответствующих целочисленных значений.
Я отлаживаю некоторый код Java, который использует javax.ws.rs.core.Response.Status. Это работает, но определяет только половину действительных кодов ответов HTTP.
Интерфейс
javax.servlet.http.HttpServletResponse
от сервлетного API имеет все коды ответов в видеint
имен константSC_<description>
. См. Http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html.источник
Ну, есть статические константы точных целочисленных значений в классе HttpURLConnection
источник
java.net.HttpURLConnection.HTTP_BAD_REQUEST
Если вы используете Spring, версия 3.x имеет то, что вы ищете: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html
источник
HttpStatus.XXX.value()
чтобы получить Int.Если вы используете Netty , вы можете использовать:
источник
Кажется, что все игнорируют часть вашего вопроса типа enum.
Хотя канонического источника для кодов состояния HTTP не существует, существует простой способ добавить любые недостающие константы состояния, которые вам нужны, к предоставленным
javax.ws.rs.core.Response.Status
без добавления каких-либо дополнительных зависимостей в ваш проект.javax.ws.rs.core.Response.Status
это только одна реализацияjavax.ws.rs.core.Response.StatusType
интерфейса. Вам просто нужно создать собственное перечисление реализации с определениями нужных вам кодов состояния.Базовые библиотеки, такие как Javax, Jersey и т. Д., Записываются в интерфейс, а
StatusType
не в реализациюStatus
(или, безусловно, должны быть) Поскольку ваш новый enum Status реализуетStatusType
его, его можно использовать везде, где вы используетеjavax.ws.rs.core.Response.Status
константу.Просто помните, что ваш собственный код также должен быть записан в
StatusType
интерфейс. Это позволит вам использовать оба ваших собственных кода состояния наряду со «стандартными».Вот суть простой реализации с константами, определенными для кодов состояния «Informational 1xx»: https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a
источник
Используйте класс javax.servlet.http.HttpServletResponse
Пример:
источник
1) Чтобы получить текст причины, если у вас есть только код, вы можете использовать:
Где
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.
источник
Также проверьте класс Restlet Status:
http://www.restlet.org/documentation/1.1/api/org/restlet/data/Status.html
источник
Лучшим поставщиком констант кода статуса http, вероятно, будет класс org.eclipse.jetty.http.HttpStatus в Jetty, потому что:
Единственное, что я хотел бы улучшить: поставить код состояния перед текстовым описанием, чтобы сделать поиск автозаполнения более удобным, когда вы начинаете с кода.
источник
Другой вариант - использовать
HttpStatus
класс из Apache commons-httpclient, который предоставляет различные состояния Http в качестве констант.источник