O Java possui uma enumeração completa para códigos de resposta HTTP?


267

Gostaria de saber se existe um tipo de enum em alguma biblioteca de classes Java padrão que define constantes simbólicas para todos os códigos de resposta HTTP válidos. Ele deve suportar a conversão de / para os valores inteiros correspondentes.

Estou depurando algum código Java que usa javax.ws.rs.core.Response.Status. Funciona, mas define apenas cerca de metade dos códigos de resposta HTTP válidos.

Respostas:


280

Eu não acho que exista um que seja completo nas classes Java padrão; HttpURLConnectionestá faltando alguns códigos, como HTTP 100/Continue.

Porém, há uma lista completa no Apache HttpComponents:
org.apache.http.HttpStatus(substituído org.apache.commons.HttpClient.HttpStatusno Apache Http Client, que chegou ao fim da vida útil )


5
Não existe uma lista completa, pois os códigos de status podem ser ampliados.
Julian Reschke

16
@JulianReschke Eu acho que "completo" aqui deve ser entendido como "está em conformidade com todos os códigos descritos pelo padrão".
22412 John Feminella

2
João: "o padrão" não define "todos" os códigos de status. É por isso que existe um registro.
Julian Reschke

1
iana.org/assignments/http-status-codes/http-status-codes.xml tem uma grande lista incluindo o código = 100
Garis M Suero

1
@ Donal: novamente, não é uma boa lista. O que é relevante é o registro da IANA.
Julian Reschke

66

A interface javax.servlet.http.HttpServletResponseda API do servlet possui todos os códigos de resposta na forma de intnomes de constantes SC_<description>. Consulte http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html


3
O HttpServletResponse suporta o RFC1945 e parte dos padrões RFC2616, mas falta todo o RFC2518. Se você precisar de uma lista completa, consulte HttpStatus como eu mencionei.
John Feminella

2
HttpServletResponse também está faltando o código de resposta 418 definido na RFC 2324
daiscog

O uso de HttpServletResponse em qualquer coisa executada fora de um servlet provavelmente levará a problemas de dependência de diamante devido à sobreposição de classes em diferentes artefatos de servlet.
Elliotte Rusty Harold

51

Bem, existem constantes estáticas dos valores inteiros exatos na classe HttpURLConnection


6
THX! isso funciona sem nenhuma dependência externa. java.net.HttpURLConnection.HTTP_BAD_REQUEST
comonad 26/09/16

É bom que ele faça parte da biblioteca padrão, mas infelizmente está incompleto - na faixa de 400, por exemplo, é cortado em 415.
tschumann

18

Se você estiver usando o Spring, a versão 3.x tem o que você procura: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html


3
Gostaria de acrescentar que o enum do Springs org.springframework.http.HttpStatus ( docs.spring.io/spring/docs/current/javadoc-api/org/… ) enum, é o único que eu poderia encontrar que fornece documentação em Java com links para a lista completa de códigos de status e seu uso em cada enumeração. Se você já estiver usando o Spring, essa seria a biblioteca a ser usada.
lastmannorth 7/07

2
Tem 100 e 418. Pena que você tem que ligar HttpStatus.XXX.value()para obter int.
WesternGun 14/03/19

7

Se você estiver usando o Netty , poderá usar:


infelizmente isso não é und enum, portanto, não utilizável em caso declarações (que me deixa triste)
Frederick Roth

7

Todo mundo parece estar ignorando a parte "tipo de enum" da sua pergunta.

Embora não haja uma fonte canônica para códigos de status HTTP, existe uma maneira simples de adicionar as constantes de status ausentes às necessárias, javax.ws.rs.core.Response.Statussem incluir dependências adicionais em seu projeto.

javax.ws.rs.core.Response.Status é apenas uma implementação do javax.ws.rs.core.Response.StatusType interface. Você só precisa criar sua própria enumeração de implementação com definições para os códigos de status que deseja.

Bibliotecas principais como Javax, Jersey etc. são gravadas na interface e StatusType não na implementação Status (ou certamente deveriam ser). Como a sua nova enumeração de status StatusTypeé implementada, ela pode ser usada em qualquer lugar que você use uma javax.ws.rs.core.Response.Statusconstante.

Lembre-se de que seu próprio código também deve ser gravado na StatusTypeinterface. Isso permitirá que você use seus próprios códigos de status, além dos códigos "padrão".

Aqui está uma lista com uma implementação simples com constantes definidas para os códigos de status "Informativo 1xx": https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a


5

Use a classe javax.servlet.http.HttpServletResponse

Exemplo:

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

4
para o desenvolvimento do cliente, é oneroso incluir toda a API do servlet apenas para captar esses códigos.
Jeffrey Blattman

1
Pode ser oneroso em alguns casos, mas encontrei esta boa resposta e estou escrevendo um aplicativo Web baseado em servlet, portanto é bom para mim.
Andrei Rînea

2
Uma resposta duplicada, publicada mais de três anos depois? Deve ser excluído.
zb226

4

1) Para obter o texto do motivo , se você tiver apenas o código, você pode usar:

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

Onde httpCodeestaria o código de razão que você obteve da resposta HTTP.

Consulte https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.html para obter detalhes

2) Para obter o código de razão , se você tiver apenas o texto, você pode usar BasicHttpResponse.

Veja aqui para detalhes: https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html



0

O melhor provedor para constantes do código de status http provavelmente é a classe org.eclipse.jetty.http.HttpStatus do Jetty porque:

  • existe um pacote javadoc no maven, o que é importante se você procurar a constante e souber apenas o número -> basta abrir a página de documentos da API e procurar o número
  • as constantes contêm o próprio código de status.

A única coisa que eu melhoraria: coloque o número do código de status na frente da descrição do texto para tornar a pesquisa de preenchimento automático mais conveniente quando você iniciar o código.


-1

Outra opção é usar a HttpStatusclasse do Apache commons-httpclient, que fornece os vários status Http como constantes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.