문제상황
Axios에서 GET 메소드로 아래와 같은 배열을 전달하면, request URL은 어떻게 될까?
import axios from 'axios';
const arrayToSend = [1, 2, 3, 4, 5];
axios
.get("https://example.com/api/data", {
params: { test: arrayToSend }
})
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error);
});
https://example.com/api/data?test=[1,2,3,4,5]?
위 CodeSandbox로 앱을 열어보면, 네트워크 탭에서 확인할 수 있듯이 아래와 같은 Request URL이 생성된다.
https://example.com/api/data?test[]=1&test[]=2&test[]=3&test[]=4&test[]=5
spring controller에서는 `@RequestParam("key[]")`와 같은 어노테이션을 사용하면 위와 같은 request도 정상적으로 처리가 가능하다고 한다.
만약, API가 이미 나와있는 상황이라면?, Request에서 key=value 형태로 처리는 불가능할까?
해결방법
qs 이용하기
import qs from "qs";
const arrayToSend = [1, 2, 3, 4, 5];
axios
.get("https://example.com/api/data", {
params: { test: arrayToSend },
paramsSerializer: (params) => {
return qs.stringify(params, { arrayFormat: "comma" });
}
})
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error);
});
위와 같이 간단하게 qs 라이브러리를 사용하면, 아래와 같이 Request URL이 치환된다.
https://example.com/api/data?test=1%2C2%2C3%2C4%2C5
( = https://example.com/api/data?test=1,2,3,4,5 )
qs 이용하기
라이브러리를 사용하지 않고 아래와 같이 paramsSerializer를 직접 구현해서 사용하는 방법도 있다.
import axios from 'axios';
const arrayToSend = [1, 2, 3, 4, 5];
axios.defaults.paramsSerializer = function (paramObj) {
const params = new URLSearchParams();
for (const key in paramObj) {
params.append(key, paramObj[key]);
}
return params.toString();
};
axios
.get("https://example.com/api/data", {
params: { test: arrayToSend }
})
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error);
});
qs를 이용한 방법과 동일하게 아래와 같이 Request URL이 생성된다.
https://example.com/api/data?test=1%2C2%2C3%2C4%2C5
Reference
반응형
'FrontEnd > HTML5 & CSS & JavaScript' 카테고리의 다른 글
[HTML/CSS] 쉐도우 돔(Shadow DOM) 내부에서 @font-face가 동작하지 않는 이슈 (0) | 2023.06.30 |
---|---|
[HTML/CSS] 쉐도우 돔(Shadow DOM)으로 스타일 충돌 해결하기 (0) | 2023.05.06 |
[JavaScript] reduce를 사용하여 순차적으로 프로미스 실행시키기 (0) | 2023.01.28 |
[css] 모바일 환경(터치 스크린)에서의 hover 이슈 (0) | 2022.09.20 |
[JavaScript] Proxy 객체란? (0) | 2022.05.06 |
댓글