2012-10-31 4 views
1

Google App Engine의 Java 런타임 용 UrlFetch 서비스를 사용하여 HTTP PUT 요청을 수행하려면 어떻게해야합니까?Java GAE UrlFetch가 HTTP PUT을 지원합니까?

POST 요청을 보낼 것입니다 내 응용 프로그램에서 다음 코드 :

URL url = ...; 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setReadTimeout(MAX_TIMEOUT); // Maximum allowable timeout on GAE of 60 seconds 
conn.setRequestMethod("POST"); 
conn.setDoOutput(true); 
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
OutputStreamWriter writer = null; 
try { 
    writer = new OutputStreamWriter(conn.getOutputStream(), Charset.forName("utf-8")); 
    writer.write(jsonContent); 
} finally { 
    if (writer != null) 
     writer.close(); 
    } 
} 
InputStream inStream = null; 
E response = null; // Unmarshalled using Jackson 
try { 
    inStream = conn.getInputStream(); 
    if (status != 204) { // NO CONTENT => No need to use Jackson to deserialize! 
     response = mapper.readValue(inStream, typeRef); 
    } 
} finally { 
    if (inStream != null) { 
     inStream.close(); 
    } 
} 

내가 PUT에 대한 POST로 같은 일을 시도,하지만 난 허용되지 방법에 대한 HTTP 오류가 점점 계속. 도와 주셔서 감사합니다.

참조 : GAE URL의 파이썬의 버전 가져 오기로 https://developers.google.com/appengine/docs/java/urlfetch/overview

불행하게도, GAE 자바 (https://developers.google.com/appengine/docs/python/urlfetch/overview을) 문서의 좋은 없습니다. Google의 모든 사용자가 이유를 말하고 싶습니까?

+0

** 참고 : **'typeRef'는 TypeReference 인스턴스,'mapper'은 ObjectMapper의 인스턴스이다 – ecbrodie

답변

1

코드가 작동한다고 생각합니다. 문의하신 서버 HTTP 405이 나타나고 있습니다 (모든 서비스가 PUT을 지원하지는 않습니다). 당신이 잘못에서 코드 아니라고 확인하고 싶은 경우는 URL을 칠 curl를 사용하여 시도 할 수 있습니다 :

curl -X PUT -d "foo=bar" http://your_site.com/path/to/your/resource 
+0

그냥 일반적인 지식을 ... 위의 코드를'conn.setRequestMethod ("PUT")와 함께 사용하고 * 존재하지 않는 * URL에서 읽으려고하면 404가 아니라 405가됩니다. 이 정상적인 행동? – ecbrodie

+0

존재하지 않는 URL을'PUT '해보고 404가 생겼습니다. –