본문 바로가기

JAVA

Rest API 호출 시 HTTP 405 Code 해결방안

최근 JavaFX로 모니터링 프로그램을 개발하고 있습니다. 모니터링에 필요한 데이터(CPU 사용량, 메모리, 디스크 사용량, 에러감지 등)을 서버로부터 받아와야했는데요. 서버와의 통신부터 405 Code가 발생해 통신이 불가능했습니다ㅠㅠ

 

MDN에서 찾아보니 405 Code가 발생하는 경우는 'Method Not Allowd'라고 개발된 API의 HTTP 메소드와 요청하는 메소드가 달라 발생하는 오류였습니다. 개발된 API의 HTTP 메소드는 GET인데 요청하는 측에서 POST 메소드로 요청하고 있는거죠.

 

Get Method

	public static JSONObject getRequest(String endpoint, JSONObject request) {

		try {
			
			HttpURLConnection conn = connect(endpoint);
			conn.setRequestMethod("GET");
			conn.setDoInput(true);
			conn.setDoOutput(true);
			
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
			bw.write(request.toJSONString());
			bw.flush();
			bw.close();
			
			System.out.println(conn.getRequestMethod());
			return validResponseCode(conn);
		} 
		catch(Exception e) {
			System.out.println(e.getMessage());
		}
		return null;		
	}

setRequestMethod에 정확하게 요청하는 메소드를 적었는데 이런일이 왜 발생했을까요?

원인은 바로 요청 당시 POST로 호출하고 있었습니다.

setReqeustMethod에 GET으로 명시해줬더라도 OututStream을 가져오고 데이터를 넣으면 자체적으로 POST으로 인식하기 때문에 발생한 문제였습니다.


Get Method

	public static JSONObject getRequest(String endpoint, JSONObject request) {

		try {
			
			HttpURLConnection conn = connect(endpoint);
			conn.setRequestMethod("GET");
			conn.setDoInput(true);
			
			return validResponseCode(conn);
		} 
		catch(Exception e) {
			System.out.println(e.getMessage());
		}
		return null;		
	}