보통 aixos를 통해 데이터를 전송할 때 데이터들을 객체에 담아서 보내고는 했었는데,
지금까지는 대부분 .post 요청으로 데이터를 전송했었기 때문에 .get 요청으로 데이터를 보낼 일이 없었다.
그래서 그냥 평소하던대로 .post() 를 .get()으로만 바꿔서 URL을 호출하니 다음과 같은 에러가 떴다.
그래서 한번 이것저것 찾아보다 정리해본다.
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());
}
'FrontEnd > JavaScript' 카테고리의 다른 글
[JS] Axios를 통한 비동기 통신방법 정리 :: GET방식, POST방식 및 Axios문법 (0) | 2022.09.03 |
---|---|
[JS] Javascript에서 주석을 다는 3가지 방법 :: 한줄 주석, 여러줄 주석 (0) | 2022.08.25 |
[JS] 문자열을 자바스크립트 코드로 사용하는 방법 / 문자열과 변수를 조합하여 자바스크립트 코드 만들기 :: window.Function (0) | 2022.08.05 |
[JS] 문자열을 자바스크립트 코드로 사용하는 방법 / 문자열과 변수를 조합하여 자바스크립트 코드 만들기 :: eval() (0) | 2022.08.05 |
[JS] 자바스크립트 :: 문자열 변수를 객체의 키값으로 사용하는 방법 (0) | 2022.08.02 |