java.net.HttpUrlConnection 을 사용한 GET/POST 방식 호출 함수를 작성 후,
호출 방식(httpMethod) 만 DELETE 방식으로 바꿔서 함수를 동작시킬시
HTTP method DELETE doesn't support output ~
과 같은 exception 이 발생한다.
https://bugs.openjdk.java.net/browse/JDK-7157360
위의 URL에 기재된 jdk bug 리포트에 따르면..
When using HttpURLConnection, if I set the request method to "DELETE" and attempt to get to the output stream to write the entity body, I get: Exception in thread "main" java.net.ProtocolException: HTTP method DELETE doesn't support output at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1004) As it turns out, sun.net.www.protocol.http.HttpURLConnection explicitly denies access to the output stream if the request method is DELETE. >> httpurlconnection 을 사용하여, DELETE request 메소드로 사용하고 (.setRequestMethod("DELETE") 의미) 바디를 쓰기위해 output stream 을 가 져오면, HTTP 메소드 DELETE는 output 을 지원하지 않는다는 exception이 발생한다. >> sun.net.www.protocol.http.HttpURLConnection 은 request 메소드가 DELETE라면 output stream 접근을 막는다. |
한줄로 정리하자면 jdk 1.7에선 http DELETE 방식에 OutputStream을 지원하지 않는다(Exception이 발생한다).
해결책 1.
jdk 버전을 1.8로 올려주면 된다. (참고)
>> jdk1.8버전에 수정된 버그인 듯 하나, 직접 실험해보진 않았다.. (프로젝트 자체가 jdk1.7이었고 다른 방법을 강구해야 했다)
해결책 2.
조건문을 걸어 파라미터가 존재하지 않을 경우 OutputStream을 사용하지 않는다.
DELETE 방식의 호출인 경우 파라미터가 없어야 정상으로 알고 있다.
(restful api 에서의 delete 요청은 uri 에 파라미터(key)를 넘긴다)
[SAMPLE]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
if(getpost.equalsIgnoreCase(POST) || getpost.equalsIgnoreCase(DELETE)){
if(params != null){
if(isJson){
postParams = makeJsonParams(params);
} else {
postParams = makeParams(params);
}
logger.info("isJson : " + isJson);
logger.info("postParam.toString() : " + postParams);
conn.getOutputStream().write(postParams.getBytes("UTF-8"));
conn.getOutputStream().flush();
}
}
|
cs |
(참고 : https://developyo.tistory.com/10?category=688588)
* 결과값은 GET/POST 와 같은 다른 HttpMethod과 상관없이 InputStream을 가져와서 읽어주면 된다.
쉽게 해결한 듯 보이나 실제론 2시간 가까이 삽질했다..
'back > java' 카테고리의 다른 글
깊은복사(Deep Copy)와 얕은복사(Shallow Copy) (3) | 2019.08.31 |
---|---|
LocalHost IP 가져오기 (0) | 2019.05.28 |
자바 컴파일 버전 Exception (Unsupported major.minor version 52.0) (0) | 2019.05.20 |
emoji 처리 (0) | 2019.04.26 |
HttpUrlConnection을 이용한 외부서버 통신(retry) (3) | 2019.01.18 |