Java에는 HTTP 응답 코드에 대한 완전한 열거 형이 있습니까?


267

유효한 모든 HTTP 응답 코드에 대한 기호 상수를 정의하는 일부 표준 Java 클래스 라이브러리에 열거 형이 있는지 궁금합니다. 해당 정수 값과의 변환을 지원해야합니다.

javax.ws.rs.core.Response.Status를 사용하는 일부 Java 코드를 디버깅하고 있습니다. 작동하지만 유효한 HTTP 응답 코드의 약 절반 만 정의합니다.

답변:


280

표준 Java 클래스에는 완전한 것이 없다고 생각합니다. HttpURLConnection와 같은 코드가 거의 없습니다 HTTP 100/Continue.

아파치 HttpComponents의 전체 목록이있다, 비록 :
org.apache.http.HttpStatus(교체 org.apache.commons.HttpClient.HttpStatus도달 아파치 웹 클라이언트에서 삶의 끝 )


5
상태 코드가 확장되고 확장 될 수 있으므로 "전체 목록"과 같은 것은 없습니다.
Julian Reschke

16
@JulianReschke 여기서 "완료"는 "표준에 명시된 모든 코드를 준수 함"을 의미한다고 생각합니다.
John Feminella

2
John : "표준"은 상태 코드를 "모두"정의하지 않습니다. 그것이 레지스트리가있는 이유입니다.
Julian Reschke

1
iana.org/assignments/http-status-codes/http-status-codes.xml 에는 code = 100을 포함하여 큰 목록이 있습니다.
Garis M Suero

1
@Donal : 다시 한 번 좋은 목록은 아닙니다. 관련된 것은 IANA 레지스트리입니다.
Julian Reschke

66

javax.servlet.http.HttpServletResponse서블릿 API 의 인터페이스 에는 int상수 이름 형식의 모든 응답 코드가 있습니다 SC_<description>. http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html을 참조 하십시오.


3
HttpServletResponse는 RFC1945 및 RFC2616 표준의 일부를 지원하지만 모든 RFC2518이 누락되었습니다. 전체 목록이 필요한 경우 언급 한대로 HttpStatus를 참조하십시오.
John Feminella

2
HttpServletResponse에는 RFC 2324에
daiscog

서블릿 외부에서 실행되는 모든 항목에서 HttpServletResponse를 사용하면 다른 서블릿 아티팩트의 클래스가 겹치므로 다이아몬드 종속성 문제가 발생할 수 있습니다.
Elliotte Rusty Harold

51

HttpURLConnection 클래스 에는 정확한 정수 값의 정적 상수가 있습니다.


6
고마워! 이것은 외부 의존성없이 작동합니다.java.net.HttpURLConnection.HTTP_BAD_REQUEST
comonad

표준 라이브러리의 일부인 것이 좋지만 불행히도 불완전합니다. 예를 들어 400 개 범위에서는 415에서 잘
립니다

18

Spring을 사용하는 경우 3.x 릴리스에는 원하는 것이 있습니다 : 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/… ) 열거 형 을 추가하고 싶습니다. 링크와 함께 Java 문서를 제공하는 유일한 방법입니다. 상태 코드의 전체 목록과 각 열거 형에서의 사용법. 이미 Spring을 사용하고 있다면 이것이 사용할 라이브러리입니다.
lastmannorth

2
그것은 100과 418을 가지고 있습니다 HttpStatus.XXX.value(). int를 얻으려면 전화해야합니다 .
WesternGun

7

Netty 를 사용하는 경우 다음을 사용할 수 있습니다.


불행히도 이것은 열거 형이 아니며 따라서 사례 진술에서 사용할 수 없습니다 (저를 슬프게합니다)
Frederick Roth

7

모두가 귀하의 질문의 "열 유형"부분을 무시하는 것 같습니다.

HTTP 상태 코드에 대한 정식 소스는 없지만 프로젝트에 추가 종속성을 추가하지 않고 필요한 누락 된 상태 상수 를 추가 하는 간단한 방법이 있습니다javax.ws.rs.core.Response.Status .

javax.ws.rs.core.Response.Statusjavax.ws.rs.core.Response.StatusType인터페이스 의 한 가지 구현입니다 . 원하는 상태 코드에 대한 정의가있는 자체 구현 열거 형을 작성하기 만하면됩니다.

Javax, Jersey 등과 같은 핵심 라이브러리 는 구현이 아닌 인터페이스에 작성됩니다 (또는 반드시 있어야 합니다). 새로운 Status 열거 형은 구현 하기 때문에 상수를 사용하는 어느 곳에서나 사용할 수 있습니다 .StatusType StatusStatusTypejavax.ws.rs.core.Response.Status

자신의 코드도 StatusType인터페이스에 작성해야합니다 . 이렇게하면 "표준"코드와 함께 고유 한 상태 코드를 모두 사용할 수 있습니다.

다음은 "Informational 1xx"상태 코드에 정의 된 상수를 사용한 간단한 구현의 요지입니다. https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a


5

javax.servlet.http.HttpServletResponse 클래스 사용

예:

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

4
클라이언트 개발을 위해서는 서블릿 API 전체를 포함시켜 코드를 작성하는 것이 부담이됩니다.
Jeffrey Blattman

1
어떤 경우에는 부담이 될 수 있지만이 좋은 대답을 찾았고 서블릿 기반 웹 응용 프로그램을 작성 중이므로 나에게 좋습니다.
Andrei Rînea

2
3 년 후에 게시 된 중복 답변? 삭제해야합니다.
zb226

4

1) 코드 만있는 경우 이유 텍스트 를 얻으려면 다음을 사용할 수 있습니다.

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

httpCodeHTTP 응답에서 가져온 이유 코드는 어디에 있습니까 ?

자세한 내용은 https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.html 을 참조하십시오

2) 텍스트 만있는 경우 이유 코드 를 얻으려면 을 사용할 수 있습니다 BasicHttpResponse.

자세한 내용은 여기를 참조하십시오 : https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html



0

http 상태 코드 상수에 가장 적합한 공급자는 다음과 같은 이유로 Jetty의 org.eclipse.jetty.http.HttpStatus 클래스 일 수 있습니다.

  • maven에는 javadoc 패키지가 있습니다. 상수를 검색하고 숫자 만 알고 있다면-> api 문서 페이지를 열고 숫자를 검색하십시오.
  • 상수는 상태 코드 번호 자체를 포함합니다.

내가 개선 할 것 : 코드를 시작할 때 자동 완성 조회를보다 명확하게하기 위해 상태 설명 번호를 텍스트 설명 앞에 넣으십시오.


-1

또 다른 옵션은 HttpStatusApache commons-httpclient의 클래스 를 사용 하여 다양한 Http 상태를 상수로 제공하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.