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


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. Debería soportar 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.

 209
Author: Zoltan Szilagyi, 2009-04-08

11 answers

No creo que haya uno que esté completo en las clases estándar de Java; HttpURLConnection le faltan bastantes códigos, como HTTP 100/Continue. Sin embargo, hay una lista completa en Apache Commons: org.apache.commons.HttpClient.HttpStatus.

Actualización: Apache Commons HttpClient is end of life . Para obtener una lista de códigos de estado, utilice org.apache.http.HttpStatus en Apache HttpComponents.

 223
Author: John Feminella,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-02 20:37:51

La Interfaz javax.servlet.http.HttpServletResponse de la API servlet tiene todos los códigos de respuesta en forma de int nombres de constantes SC_<description>. Véase http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html

 48
Author: David Rabinowitz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-01 10:42:52

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

 30
Author: Mystic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-08 14:41:50
 13
Author: Ed J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-26 00:27:22

Use javax.servlet.http.HttpServletResponse class

Ejemplo:

javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED //401
javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR //500
 5
Author: Andrés Canavesi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-05 14:50:56

Si estás usando Netty , puedes usar:

 5
Author: Andrejs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-27 18:24:48

Todo el mundo parece estar ignorando la parte "tipo enumeración" de su pregunta.

Si bien no hay una fuente canónica para los códigos de estado HTTP, existe una forma sencilla de agregar cualquier constante de Estado faltante que necesite a las proporcionadas por javax.ws.rs.core.Response.Status sin agregar dependencias adicionales a su proyecto.

javax.ws.rs.core.Response.Status es solo una implementación de la interfaz javax.ws.rs.core.Response.StatusType. Simplemente necesita crear su propia enumeración de implementación con definiciones para los Códigos de estado que desea.

Bibliotecas básicas como Javax, Jersey, etc. se escriben en la interfaz StatusType no la aplicación Status (o ciertamente deberían ser). Dado que su nueva enumeración de estado implementa StatusType se puede usar en cualquier lugar que usaría una constante javax.ws.rs.core.Response.Status.

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

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

 3
Author: David Avendasora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-05 16:25:01

También echa un vistazo a la clase de estado Restlet:

Http://www.restlet.org/documentation/1.1/api/org/restlet/data/Status.html

 2
Author: Greg Noe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-08 17:54:14

1) Para obtener la razón texto si solo tiene el código, puede usar:

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

Donde httpCode sería el código de denegación que obtuviste de la respuesta HTTP.

Véase 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 la razón si solo tiene el texto, puede usar BasicHttpResponse.

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

 1
Author: Maira Bay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-24 20:25:31

Es probable que el mejor proveedor para constantes de código de estado http sea la organización de Jetty.eclipsar.embarcadero.http.Clase HttpStatus 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 api docs y busque el número
  • las constantes contienen el número de código de estado en sí.

Lo único que mejoraría: poner el número de código de estado delante de la descripción del texto con el fin de hacer búsqueda de autocompletado más conveniente cuando se está comenzando con el código.

 0
Author: user1050755,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-19 22:11:54

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

 0
Author: ak123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-11 15:27:09