2009-04-08 14 views
188

Me pregunto si hay un tipo de enumeración en alguna biblioteca de clases estándar de Java 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.¿Java tiene una enumeración completa para los códigos de respuesta HTTP?

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

Respuesta

203

No creo que hay uno que es completa en las clases estándar de Java; HttpURLConnection faltan algunos 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 es end of life. Para obtener una lista de códigos de estado, use org.apache.http.HttpStatus en Apache HttpComponents.

+4

No existe la" lista completa ", ya que los códigos de estado pueden ser ampliados. –

+10

@JulianReschke Creo que "completo" debe entenderse como "conforme a todos los códigos descritos por el estándar". –

+2

John: "el estándar" no define "todos" los códigos de estado. Es por eso que hay un registro. –

22

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

+4

thx! esto funciona sin dependencias externas. 'java.net.HttpURLConnection.HTTP_BAD_REQUEST' – comonad

+0

Respuesta duplicada – Nathan

42

La interfaz javax.servlet.http.HttpServletResponse de la API de servlet tiene todos los códigos de respuesta en forma de int nombres de constantes . Ver http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html

+2

HttpServletResponse es compatible con RFC1945 y parte de los estándares RFC2616, pero falta todo RFC2518. Si necesita una lista completa, vea HttpStatus como mencioné. –

+2

HttpServletResponse tampoco tiene el código de respuesta 418 definido en [RFC 2324] (https://tools.ietf.org/html/rfc2324) – megaflop

2

También puedes ver la clase de estado Restlet:

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

+0

Nuevamente; los códigos de estado son extensibles, por lo que no puede haber una lista "completa", a menos que se revise cada vez que se agregue un nuevo código de estado al registro de IANA (http://www.iana.org/assignments/http-status-codes) –

13

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

+1

Me gustaría agregar que Springs org.springframework.http.HttpStatus (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpStatus.html) enum, es el solo uno 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á usando Spring, esta sería la biblioteca que debe usar. – lastmannorth

5

Uso javax. clase servlet.http.HttpServletResponse

Ejemplo:

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

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

+1

Puede ser una carga para algunos casos, pero he encontrado esta buena respuesta y estoy escribiendo una aplicación web basada en servlets, así que es bueno para mí. –

+2

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

0

El mejor proveedor para las constantes de código de estado HTTP es probable que sea la clase de org.eclipse.jetty.http.HttpStatus embarcadero porque:

  • hay un paquete de javadoc en experta que es importante si se busca el constante y solo saber el número -> simplemente abra la página de documentos de API y busque el número
  • las constantes contienen el número de código de estado.

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

-1

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

+1

Duplica la información ya en otra respuesta – Nathan

5

Si está utilizando Netty, puede utilizar:

+0

lamentablemente esto no es enum y por lo tanto no se puede usar en las declaraciones de casos (lo cual me entristece) –

3

Parece que todos ignoran la parte "enum type" de su pregunta.

Si bien no hay una fuente canónica para los códigos de estado HTTP hay una forma sencilla de añadir cualquier constante de estado que faltan que necesita a los proporcionados por javax.ws.rs.core.Response.Status sin añadir ningún 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 las definiciones de los códigos de estado que desee.

bibliotecas del núcleo como Javax, Jersey, etc. se escriben en la interfaz StatusType no la aplicación Status (o ciertamente deben ser). Dado que su nuevo Status enum implementa StatusType se puede usar en cualquier lugar donde use una constante javax.ws.rs.core.Response.Status.

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

Aquí hay una esencia con una aplicación sencilla con constantes definidas por las "1xx Informativo" Códigos de estado: https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a

1

1) Para obtener la razón texto si sólo tiene el código, se puede utilizar:

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

Donde httpCode serí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 sólo tiene el texto, puede utilizar BasicHttpResponse.

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

Cuestiones relacionadas