2009-12-07 9 views
38

나는Servlet API의 요청 메소드 상수는 어디에 있습니까?

if (POST.equals(req.getMethod())) 

대신

if ("POST".equals(req.getMethod())) 

의 쓰고 싶어하지만 난 (내가 수를 예상 경우에만, HttpServletRequest의에보고) 서블릿 API의 상수 정의를 찾을 수 없습니다.

그들은 어디에 있습니까 (많은 라이브러리를 사용하고 있으므로 다른 사람이 정의한 경우 작동 할 수도 있습니다)?

+0

그래서 당신이 사용할 수있는 모든 HTTP 방법을 제공하는 열거입니다

org.springframework.web.bind.annotation.RequestMethod 

메인 자바 클래스 라이브러리에서 조금이라도 ... 'java.net.HttpURLConnection'조차도 그것들을 상수로 찾을 수 없다. – Powerlord

+0

~ 하드 코딩이 왜 나쁜지 기억하는 것이 중요합니다. 하드 코딩 값은 (1) 가독성 ("Bob은 왜 여기에서 3849를 사용 했습니까?") 또는 버그를 유발할 수 있습니다. 한 지점에서 값을 변경하려면 다른 지점에서 값을 변경해야합니다. 하나). 경우 2에서이 값은 변수/상수에 넣고 한 번만 변경해야합니다. "POST"대신 POST를 사용하면 (1) 또는 (2)가 손상되지 않으므로 "하드 코드 된"값을 사용하는 것이 좋습니다. –

답변

20

은 자바 EE 6는 상수로 HTTP 메소드 이름을 추가 한 것으로 보인다 javax.ws.rs.HttpMethod 어노테이션 인터페이스. 설정에 따라 사용 가능할 수도 있습니다. 이에 대해 정의 된 열거 형이없는 이유를 궁금해하는 경우

http://docs.oracle.com/javaee/6/api/javax/ws/rs/HttpMethod.html

+1

Jax-rs를 사용하는 경우에 유용하지만, 맞습니다. 이것은 상수의 모호한 위치입니다. 대신 Servlet API로 이동해야합니다. –

12

내가 아는 한, 특정 속성에 대한 상수는 없습니다. 그래도 사용할 수있는 것을 확인하려면 full list of constants을 확인하십시오.

물론 코드를 작성하기가 쉽다면 언제나 자신 만의 상수를 정의 할 수 있습니다.

+1

다음은 javax.servlet에 없습니다. 괴상한 그들은 기본적인 것들을 놓치지 만, DIGEST_AUTH의 상수를 가지고 ... – Thilo

+0

적어도 그들은 모든 HTTP 상태 코드가 있습니다. – Thilo

+1

@Matt 대답은 사실이지만 Java 6부터는 이러한 상수가 존재합니다.제발 업데이 트하십시오 :) –

12

이 상수는

public abstract class HttpServlet extends GenericServlet 
    implements java.io.Serializable 
{ 
    private static final String METHOD_DELETE = "DELETE"; 
    private static final String METHOD_HEAD = "HEAD"; 
    private static final String METHOD_GET = "GET"; 
    private static final String METHOD_OPTIONS = "OPTIONS"; 
    private static final String METHOD_POST = "POST"; 
    private static final String METHOD_PUT = "PUT"; 
    private static final String METHOD_TRACE = "TRACE"; 
... 

그냥 그대로 메소드 이름을 사용하여 완벽하게 괜찮아요, 서블릿에서 비공개로 정의된다. 의 JDK

+2

이것은 매우 훌륭하지만 그 필드는 사적인 것입니다 !!! –

1

, 그이 질문과 답변에 설명 된 것 : Why HttpRequest.HttpMethod is string instead of Enum?

결론은 HTTP 사양은 허용 방법의 집합을 제한하지 않습니다 , 스펙에 명시 적으로 언급 된 메소드 이외에 추가 메소드가 사용될 수 있습니다. (너무 너무 JDK 외부) 봄에

+0

.NET에서 Java가 부족한 이러한 문자열 상수가있는 것 같습니다. – Thilo

7

당신은 사용할 수 있습니다 : 이것은 내가 조금 주위를 찌르고 RequestMethod.POST.name()

관련 문제