¿Java tiene una enumeración completa para los códigos de respuesta HTTP?


267

Me pregunto si hay un tipo de enumeración en alguna biblioteca de clases Java estándar que defina constantes simbólicas para todos los códigos de respuesta HTTP válidos. Debe admitir la conversión a / desde los valores enteros correspondientes.

Estoy depurando un código Java que usa javax.ws.rs.core.Response.Status. Funciona, pero solo define aproximadamente la mitad de los códigos de respuesta HTTP válidos.

Respuestas:


280

No creo que haya uno completo en las clases estándar de Java; HttpURLConnectionle faltan algunos códigos, como HTTP 100/Continue.

Sin embargo, hay una lista completa en Apache HttpComponents:
org.apache.http.HttpStatus(reemplazado org.apache.commons.HttpClient.HttpStatuspor Apache Http Client, que llegó al final de su vida útil )


55
No existe una "lista completa", ya que los códigos de estado pueden extenderse y pueden ampliarse.
Julian Reschke

16
@JulianReschke Creo que "completo" aquí debería entenderse como "conforme a todos los códigos descritos por el estándar".
John Feminella

2
John: "el estándar" no define "todos" los códigos de estado. Por eso hay un registro.
Julian Reschke

1
iana.org/assignments/http-status-codes/http-status-codes.xml tiene una gran lista que incluye el código = 100
Garis M Suero

1
@Donal: de nuevo, no es una buena lista. Lo relevante es el registro de la IANA.
Julian Reschke

66

La interfaz javax.servlet.http.HttpServletResponsede la API de servlet tiene todos los códigos de respuesta en forma de intnombres de constantes SC_<description>. Ver http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html


3
HttpServletResponse admite el RFC1945 y parte de los estándares RFC2616, pero le faltan todos los RFC2518. Si necesita una lista completa, vea HttpStatus como mencioné.
John Feminella

2
A HttpServletResponse también le falta el código de respuesta 418 definido en RFC 2324
daiscog

Es probable que el uso de HttpServletResponse en cualquier cosa que se ejecute fuera de un servlet provoque problemas de dependencia del diamante debido a la superposición de clases en diferentes artefactos de servlet.
Elliotte Rusty Harold

51

Bueno, hay constantes estáticas de los valores enteros exactos en la clase HttpURLConnection


66
¡Gracias! Esto funciona sin ninguna dependencia externa. java.net.HttpURLConnection.HTTP_BAD_REQUEST
comonad

Es bueno que sea parte de la biblioteca estándar, pero desafortunadamente está incompleta: en el rango de 400, por ejemplo, se corta a 415.
tschumann

18

Si está utilizando Spring, la versión 3.x tiene lo que está buscando: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html


3
Me gustaría agregar que Springs org.springframework.http.HttpStatus ( docs.spring.io/spring/docs/current/javadoc-api/org/… ) enum, es el único que pude encontrar que proporciona documentación de Java con enlaces a la lista completa de códigos de estado y su uso en cada enumeración. Si ya está utilizando Spring, entonces esta sería la biblioteca para usar.
lastmannorth

2
Tiene 100 y 418. Lástima que tengas que llamar HttpStatus.XXX.value()para obtener int.
WesternGun

7

Si está utilizando Netty , puede usar:


desafortunadamente esto no es enumeración y, por lo tanto, no se puede usar en declaraciones de casos (lo que me pone triste)
Frederick Roth

7

Todo el mundo parece ignorar la parte del "tipo de enumeración" de su pregunta.

Si bien no hay una fuente canónica para los códigos de estado HTTP, hay una manera simple de agregar las constantes de estado que faltan que necesita a las proporcionadas javax.ws.rs.core.Response.Statussin agregar dependencias adicionales a su proyecto.

javax.ws.rs.core.Response.Statuses solo una implementación de la javax.ws.rs.core.Response.StatusTypeinterfaz. Simplemente necesita crear su propia enumeración de implementación con definiciones para los códigos de estado que desee.

Las bibliotecas principales como Javax, Jersey, etc. están escritas en la interfaz, StatusType no en la implementación Status (o ciertamente deberían estarlo). Dado que su nuevo estado enum implementa StatusTypese puede usar en cualquier lugar donde usaría una javax.ws.rs.core.Response.Statusconstante.

Solo recuerde que su propio código también debe escribirse en la StatusTypeinterfaz. Esto le permitirá usar sus propios códigos de estado junto con los "estándar".

Aquí hay una idea básica con una implementación simple con constantes definidas para los códigos de estado "1xx informativo": https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a


5

Utilice la clase javax.servlet.http.HttpServletResponse

Ejemplo:

javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED //401
javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR //500

44
para el desarrollo del cliente, es engorroso incluir toda la API de servlet solo para recoger estos códigos.
Jeffrey Blattman

1
Puede ser oneroso para algunos casos, pero he encontrado esta buena respuesta y estoy escribiendo una aplicación web basada en servlet, así que es buena para mí.
Andrei Rînea

2
¿Una respuesta duplicada, publicada más de tres años después? Debería ser eliminado.
zb226

4

1) Para obtener el texto del motivo si solo tiene el código, puede usar:

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

¿Dónde httpCodeestaría el código de razón que obtuvo de la respuesta HTTP?

Ver https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.html para más detalles

2) Para obtener el código de razón si solo tiene el texto, puede usarlo BasicHttpResponse.

Ver aquí para más detalles: https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html



0

Es probable que el mejor proveedor de constantes de código de estado http sea la clase org.eclipse.jetty.http.HttpStatus de Jetty porque:

  • hay un paquete javadoc en maven que es importante si busca la constante y solo conoce el número -> simplemente abra la página de api docs y busque el número
  • las constantes contienen el número del código de estado en sí.

Lo único que mejoraría: coloque el número del código de estado delante de la descripción del texto para que la búsqueda de autocompletado sea más conveniente cuando comience con el código.


-1

Otra opción es usar la HttpStatusclase de Apache commons-httpclient que le proporciona los diversos estados Http como constantes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.