Zastanawiam się, czy w standardowej bibliotece klas Java jest typ wyliczania, który definiuje stałe symboliczne dla wszystkich prawidłowych kodów odpowiedzi HTTP. Powinien obsługiwać konwersję do / z odpowiednich wartości całkowitych.
Debuguję kod Java, który używa javax.ws.rs.core.Response.Status. Działa, ale określa tylko około połowy prawidłowych kodów odpowiedzi HTTP.
Interfejs
javax.servlet.http.HttpServletResponse
API serwletu zawiera wszystkie kody odpowiedzi w postaciint
nazw stałychSC_<description>
. Zobacz http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.htmlźródło
Cóż, istnieją stałe statyczne dokładnych wartości liczb całkowitych w klasie HttpURLConnection
źródło
java.net.HttpURLConnection.HTTP_BAD_REQUEST
Jeśli używasz Springa, wersja 3.x ma to, czego szukasz: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html
źródło
HttpStatus.XXX.value()
aby dostać int.Jeśli korzystasz z Netty , możesz użyć:
źródło
Wygląda na to, że wszyscy ignorują część twojego typu „enum”.
Chociaż nie ma kanonicznego źródła dla kodów stanu HTTP, istnieje prosty sposób dodania wszelkich brakujących stałych statusu, których potrzebujesz, do tych dostarczonych
javax.ws.rs.core.Response.Status
bez dodawania żadnych dodatkowych zależności do projektu.javax.ws.rs.core.Response.Status
to tylko jedna implementacjajavax.ws.rs.core.Response.StatusType
interfejsu. Musisz po prostu stworzyć własne wyliczenie implementacji z definicjami odpowiednich kodów stanu.Biblioteki podstawowe, takie jak Javax, Jersey itp., Są zapisywane w interfejsie, a
StatusType
nie w implementacjiStatus
(a na pewno powinny ). Ponieważ nowe enum statusu implementujeStatusType
, można go używać w dowolnym miejscu, w którym byś używałjavax.ws.rs.core.Response.Status
stałej.Pamiętaj tylko, że Twój własny kod powinien być również zapisany w
StatusType
interfejsie. Umożliwi to używanie zarówno własnych kodów stanu, jak i „standardowych”.Oto podstawa z prostą implementacją ze stałymi zdefiniowanymi dla kodów statusu „Informacyjnych 1xx”: https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a
źródło
Użyj klasy javax.servlet.http.HttpServletResponse
Przykład:
źródło
1) Aby uzyskać tekst przyczyny, jeśli masz tylko kod, możesz użyć:
Gdzie
httpCode
byłby kod przyczyny otrzymany z odpowiedzi HTTP.Szczegółowe informacje można znaleźć na stronie https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.html
2) Aby uzyskać kod przyczyny, jeśli masz tylko tekst, możesz użyć
BasicHttpResponse
.Zobacz szczegóły: https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html
źródło
Sprawdź także klasę Restlet Status:
http://www.restlet.org/documentation/1.1/api/org/restlet/data/Status.html
źródło
Najlepszym dostawcą dla stałych kodu stanu http prawdopodobnie będzie klasa Jetty's org.eclipse.jetty.http.HttpStatus, ponieważ:
Jedyne, co bym poprawił: umieść numer kodu stanu przed opisem tekstowym, aby wyszukiwanie autouzupełniania było bardziej wygodne, gdy zaczynasz od kodu.
źródło
Inną opcją jest użycie
HttpStatus
klasy z Apache commons-httpclient, która zapewnia różne statusy HTTP jako stałe.źródło