개발공작소
article thumbnail
728x90
반응형

 

 

 

 

보통 aixos를 통해 데이터를 전송할 때 데이터들을 객체에 담아서 보내고는 했었는데, 

지금까지는 대부분 .post 요청으로 데이터를 전송했었기 때문에 .get 요청으로 데이터를 보낼 일이 없었다.

 

그래서 그냥 평소하던대로 .post() 를 .get()으로만 바꿔서 URL을 호출하니 다음과 같은 에러가 떴다.

 

415에러 발생

그래서 한번 이것저것 찾아보다 정리해본다.

 

 

415 ( Unsupported Media Type ) 에러가 발생하는 이유?

 

보통 415 (Unsupported Media Type) 에러가 떨어진다는 말은 전송한 데이터와 전송받는 데이터의 타입이 

일치하지 않기 때문이라고 알고 있었다. 

이런 에러가 예전에도 뜬 적이 있는데, json데이터를 서버로 보냈는데 Controller에서 받을 때 json이 아니어서

관련 라이브러리를 추가 해주는 방식으로 해결을 했었다. 관련 링크 참조 => JSON데이터를 객체 형태로 받기 

 

근데 이번에는 라이브러리도 다 있고 문제가 없어 보였는데... 결국 문제를 찾았다.

 

우선 내가 작성한 코드를 살펴보도록 하자.

 

 

axiosGet.js

document.addEventListener("DOMContentLoaded", function(){
	
    // 데이터를 pop이라는 변수에 담음
    var pop = {
        'popSub' : 'test!!'
    };
    
    // 헤더 설정
    const axiosConfig = {
        headers : {
            'Content-Type' : 'application/json'
        }
    }

    // axios.get 요청
    axios.get('localhost:8098/com/read.do', pop, axiosConfig);

});

 

딱히 문제 될 건 없어보인다.  그냥 데이터와 헤더를 설정하여 axios.get 요청을 하는 단순한 코드.

 

그럼 실제로 데이터를 받는 Controller를 보도록 하자.

 

 

AxiosGet.java

@RequestMapping(value="/read.do" , method = RequestMethod.GET)
public void read(@RequestBody PopInfoVO pop) throws IOException{
    System.out.println(pop.getPopSub());
}

 

여기도 크게 문제가 있어보이지는 않는다.. 라고 믿었었다. 그동안 post요청을 할 때 쓰던 코드를 그대로 

갖다 썼었으니까..

 

근데 인자로 받는 @RequestBody PopInfoVO pop 이 녀석이 문제였다.

 

본적으로 GET요청은 POST요청과는 다르게 데이터를 Message Body에 담지 않고 params에 담아 요청하기 때문이다.

흔히 보이는 URL.do?userId='test'&passwd='test1234'와 같이 ? 뒤에 붙는 녀석들 같이 말이다.

 

결국 저 @RequestBody이 녀석 때문에 에러가 발생하는 것이다. 

왜 GET요청을 했고 RequestMapping 어노테이션에서도 method = RequestMethod.GET와 같이 설정을 해놓고

@RequestBody로 데이터를 받느냐는 의미 인 것 같다..

 

 

 

415 ( Unsupported Media Type ) 에러 해결방법

 

위에서 대충 무엇이 문제인지 알았으니, 해결방법은 간단하다.

@RequestBody만 지워주면 제대로 데이터를 받을 수 있다.

 

 

수정전

@RequestMapping(value="/read.do" , method = RequestMethod.GET)
public void read(@RequestBody PopInfoVO pop) throws IOException{
    System.out.println(pop.getPopSub());
}

 

수정후

@RequestMapping(value="/read.do" , method = RequestMethod.GET)
public void read(PopInfoVO pop) throws IOException{
    System.out.println(pop.getPopSub());
}

 

 

 

 

 

728x90
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!