Java, HTTP yanıt kodları için eksiksiz bir numaralandırmaya sahip mi?


267

Tüm geçerli HTTP yanıt kodları için sembolik sabitleri tanımlayan bazı standart Java sınıf kitaplığında bir enum türü olup olmadığını merak ediyorum. İlgili tamsayı değerlerine / değerlerinden dönüştürmeyi desteklemelidir.

Javax.ws.rs.core.Response.Status kullanan bazı Java kodlarında hata ayıklama. Çalışır, ancak geçerli HTTP yanıt kodlarının yalnızca yarısını tanımlar.

Yanıtlar:


280

Standart Java sınıflarında bir tane olduğunu sanmıyorum; HttpURLConnectiongibi birkaç kod eksik HTTP 100/Continue.

Bununla birlikte, Apache HttpComponents'de tam bir liste var:
org.apache.http.HttpStatus( ömrünün sonunaorg.apache.commons.HttpClient.HttpStatus ulaşan Apache Http İstemcisi ile değiştirildi )


5
Durum kodlarının olabileceği ve genişletilebileceği için "tam liste" diye bir şey yoktur.
Julian Reschke

16
@JulianReschke Sanırım burada "tamamlandı", "standardın ana hatlarıyla belirtilen tüm kodlara uygun" anlamına gelmelidir.
John Feminella

2
John: "standart" durum kodlarını "tümü" olarak tanımlamaz. Bu yüzden bir kayıt defteri var.
Julian Reschke

1
iana.org/assignments/http-status-codes/http-status-codes.xml kodunun da dahil olduğu büyük bir liste var = 100
Garis M Suero

1
@Donal: yine, iyi bir liste değil. İlgili olan IANA kayıt defteri.
Julian Reschke

66

javax.servlet.http.HttpServletResponseSunucu uygulaması API'sindeki Arayüz , tüm yanıt kodlarını intsabit adları şeklinde içerir SC_<description>. Bkz. Http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html


3
HttpServletResponse, RFC1945'i ve RFC2616 standartlarının bir bölümünü destekler, ancak tüm RFC2518 eksik. Tam bir listeye ihtiyacınız varsa, bahsettiğim gibi HttpStatus'a bakın.
John Feminella

2
HttpServletResponse'de RFC 2324
daiscog 4:16

Bir sunucu uygulamasının dışında çalışan herhangi bir şeyde HttpServletResponse'nin kullanılması, farklı sunucu uygulaması yapılarındaki çakışan sınıflar nedeniyle elmas bağımlılığı sorunlarına yol açabilir.
Elliotte Rusty Harold

51

HttpURLConnection sınıfında tam sayı değerlerinin statik sabitleri vardır


6
Teşekkürler! bu herhangi bir dış bağımlılık olmadan çalışır. java.net.HttpURLConnection.HTTP_BAD_REQUEST
comonad

Standart kütüphanenin bir parçası olduğu iyi ama maalesef eksik - örneğin 400 aralığında
415'te kesildi

18

Spring kullanıyorsanız, 3.x sürümü aradığınız şeye sahiptir: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html


3
Springs org.springframework.http.HttpStatus ( docs.spring.io/spring/docs/current/javadoc-api/org/… ) enum, Java belgeleri bağlantıları sağlayan bulabileceğim tek kişi olduğunu eklemek istiyorum Durum kodlarının tam listesine ve bunların her bir numarada kullanılmasına Eğer zaten Spring kullanıyorsanız, o zaman bu kullanılacak kütüphane olacaktır.
lastmannorth

2
100 ve 418 vardır. Ne yazık ki HttpStatus.XXX.value()int almak için aramak zorunda.
WesternGun


7

Herkes sorunuzun "enum type" kısmını görmezden geliyor gibi görünüyor.

HTTP Durum Kodları için kanonik bir kaynak olmasa da, projenize herhangi bir ek bağımlılık eklemeden ihtiyacınız olan eksik Durum sabitlerini eklemenin basit bir yolu vardır javax.ws.rs.core.Response.Status.

javax.ws.rs.core.Response.Statusjavax.ws.rs.core.Response.StatusTypearayüzün sadece bir uygulamasıdır . İstediğiniz Durum Kodları için tanımlarla kendi uygulama numaralandırmanızı oluşturmanız yeterlidir.

Javax, Jersey, vb. Gibi çekirdek kütüphaneler , uygulamaya değil (veya kesinlikle olması gereken) arayüze yazılır . Yeni Status enum'unuz uyguladığı için her yerde kullanılabilir, sabit kullanırsınız .StatusType StatusStatusTypejavax.ws.rs.core.Response.Status

Sadece kendi kodunuzun da StatusTypearayüze yazılması gerektiğini unutmayın . Bu, kendi Durum Kodlarınızı "standart" kodların yanında kullanmanıza olanak tanır.

İşte "Bilgi 1xx" Durum Kodları için tanımlanan sabitleri olan basit bir uygulamaya sahip bir özet: https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a


5

Javax.servlet.http.HttpServletResponse sınıfını kullanın

Misal:

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

4
istemci geliştirme için, sadece bu kodları almak için tüm sunucu uygulaması API'sını dahil etmek külfetlidir.
Jeffrey Blattman

1
Bazı durumlar için külfetli olabilir ama bu iyi cevabı buldum ve sunucu uygulaması tabanlı bir web uygulaması yazıyorum, bu yüzden benim için iyi.
Andrei Rînea

2
Üç yıl sonra gönderilen yinelenen bir cevap mı? Silinmelidir.
zb226

4

1) Yalnızca kodunuz varsa neden metnini almak için aşağıdakileri kullanabilirsiniz:

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

httpCodeHTTP yanıtından aldığınız neden kodu nerede olurdu?

Ayrıntılar için https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.html adresine bakın.

2) Sadece metin varsa neden kodunu almak için kullanabilirsiniz BasicHttpResponse.

Ayrıntılar için buraya bakın: https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html



0

Http durum kodu sabitleri için en iyi sağlayıcı muhtemelen Jetty'nin org.eclipse.jetty.http.HttpStatus sınıfı olacaktır, çünkü:

  • maven'de sabiti ararsanız ve sadece numarayı biliyorsanız önemli bir javadoc paketi vardır -> sadece api dokümanlar sayfasını açın ve numarayı arayın
  • sabitler durum kodu numarasının kendisini içerir.

Geliştireceğim tek şey: kodla başlarken otomatik tamamlama aramasını daha uygun hale getirmek için durum kodu numarasını metin açıklamasının önüne koyun.


-1

Başka bir seçenek HttpStatusde Apache commons-httpclient sınıfından sabit olarak çeşitli Http durumlarını sağlayan sınıfı kullanmaktır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.