web-dev-qa-db-fra.com

Est-ce que Java a un enum complet pour les codes de réponse HTTP?

Je me demande s'il existe un type enum dans une bibliothèque de classes standard Java qui définit des constantes symboliques pour tous les codes de réponse HTTP valides. Il devrait prendre en charge la conversion vers/à partir des valeurs entières correspondantes.

Je débogue certains Java codes utilisant javax.ws.rs.core.Response.Status. Cela fonctionne, mais il ne définit qu'environ la moitié des codes de réponse HTTP valides.

234
Zoltan Szilagyi

Je ne pense pas qu'il en existe une qui soit complète dans les classes standard Java; HttpURLConnection il manque beaucoup de codes, comme _HTTP 100/Continue_.

Il existe une liste complète dans les composants Apache HttpComponents:
org.Apache.http.HttpStatus (remplacé org.Apache.commons.HttpClient.HttpStatus de Apache Http Client, qui a atteint en fin de vie )

254
John Feminella

L'interface javax.servlet.http.HttpServletResponse de l'API du servlet contient tous les codes de réponse sous la forme de int nom de constantes SC_<description>. Voir http://docs.Oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html

58
David Rabinowitz

Eh bien, il y a des constantes statiques des valeurs entières exactes dans la classe HttpURLConnection

37
Mystic

Si vous utilisez Spring, la version 3.x répond à vos attentes: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus. html

17
Ed J

Si vous utilisez Netty , vous pouvez utiliser:

7
Andrejs

Utilisez la classe javax.servlet.http.HttpServletResponse

Exemple:

javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED //401
javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR //500
6
Andrés Canavesi

Tout le monde semble ignorer la partie "type énumération" de votre question.

Bien qu'il n'y ait pas de source canonique pour les codes d'état HTTP, il existe un moyen simple de add toutes les constantes d'état manquantes nécessaires à celles fournies par javax.ws.rs.core.Response.Status sans ajouter de dépendances supplémentaires à votre projet.

javax.ws.rs.core.Response.Status n'est qu'une implémentation de l'interface javax.ws.rs.core.Response.StatusType. Vous devez simplement créer votre propre énumération d'implémentation avec les définitions des codes d'état souhaités.

Les bibliothèques de base comme Javax, Jersey, etc. sont écrites dans le interfaceStatusType pas le implémentationStatus (ou certainement devrait être). Comme votre nouvelle énumération de statut implémente StatusType, vous pouvez l'utiliser n'importe où vous utiliseriez une constante javax.ws.rs.core.Response.Status.

Rappelez-vous simplement que votre propre code doit également être écrit sur l'interface StatusType. Cela vous permettra d’utiliser vos propres codes d’état en plus des codes "standard".

Voici un résumé avec une implémentation simple avec des constantes définies pour les codes d'état "Informationnel 1xx": https://Gist.github.com/avendasora/a5ed9acf6b1ee709a14a

5
David Avendasora

1) Pour obtenir la raison du texte , si vous ne possédez que le code, vous pouvez utiliser:

org.Apache.http.impl.EnglishReasonPhraseCatalog.INSTANCE.getReason(httpCode,null)

httpCode serait le code de raison que vous avez obtenu de la réponse HTTP.

Voir https://hc.Apache.org/httpcomponents-core-ga/httpcore/apidocs/org/Apache/http/impl/EnglishReasonPhraseCatalog.html pour plus de détails

2) Pour obtenir le code de la raison , si vous ne disposez que du texte, vous pouvez utiliser BasicHttpResponse.

Voir ici pour plus de détails: https://hc.Apache.org/httpcomponents-core-ga/httpcore/apidocs/org/Apache/http/message/BasicHttpResponse.html

2
Maira Bay
2
Greg Noe

Une autre option consiste à utiliser la classe HttpStatus de Apache commons-httpclient, qui vous fournit les différents statuts Http en tant que constantes.

0
ak123

Le meilleur fournisseur de constantes de code de statut http est probablement la classe org.Eclipse.jetty.http.HttpStatus de Jetty pour les raisons suivantes:

  • il y a un paquet javadoc dans maven qui est important si vous recherchez la constante et ne connaissez que le numéro -> ouvrez simplement la page api docs et recherchez le numéro
  • les constantes contiennent le numéro de code d'état lui-même.

La seule chose que je voudrais améliorer: placez le numéro de code de statut devant le texte descriptif afin de faciliter la recherche de complétion automatique lorsque vous commencez avec le code.

0
user1050755