코딩 연습장/오류!

JSP에서 axios에 호출하지 않는 오류

Do아 2022. 8. 30. 00:53
728x90

2022/07/20

 

 

 

 

 

 

  JSP 사용중 AXIOS로 API를 호출되지 않는 오류

회사에서 웹을 개발하는 중 JSP에서 호출한 API가 작동되지 않는 것을 발견했다

같은 JSP 안에 다른 API는 호출이 잘 되는데 하나의 API가 작동되지 않는 것이다

처음에는 단순히 JSP에서 mode나 header 부분이 잘못돼서 호출이 안되는 줄 알았다 

 

왜냐하면 같은 API를 호출할때 mode가 null로 들어가서 해당 API를 맵핑하는 controller에서 post로 받고 있었기 때문에 

JSP에서 header에서 mode를 잘못 넘겨줘서 controller를 찾지 못하는 것이라고 생각했다

 

하지만 완.전.히 다른 문제였다 

 

 

 

 

 

  해결 방법

문제는 DTO였다

JSP에서 호출한 API의 log를 찍어봐도 아예 출력되지 않는 것이다.

API 호출이 됐는데 controller에서 인식하지 못한다면 확인할 것은 

1. api의 오타가 있는지

2. header가 controller와 잘 부합하는지

3. jsp에서 받고 있는 파라미터가 requestParam이나 requestBody에서 받아줄 수 있는지

 

나같은 경우 3번에 해당했다 

 

무슨 소리냐면 보통 jsp에서 화면의 데이터를 controller로 넘길 때 

@RequestBody를 통해서 List<dto> dto 를 통해서 값을 받아오는데 

해당 dto에 jsp에서 넘겨주는 값과 맵핑되는 값이 없어서 api를 호출해도 묵묵 부답이었다

 

그래서 dto에 jsp에서 넘겨주는 값을 추가로 변수 선언해줬더니 해결됐다

 

 

 

 

  참고

JSP에서 파라미터로 controller에 값을 넘겨줄 때 

@RequestParam과 @RequestBody를 쓰는데 차이점을 알아보겠다

 

@RequestParam은 

@RequestParam Map<String, String> param 이런 형태로 사용하면 

jsp에서 넘겨받은 값을

name, dona 

age, 22

이런식으로 값을 받는다

 

@RequestParam("name") String name 하면 

name = dona 로 받을 수 있다

 

 

 

 

 

@RequestBody는 

JSP에서 받아오 값을 name=dona&age=22 이런식으로 연결해서 값을 받는데 

dto를 사용하면 list형태로 받을 수 있다

 

dto.java

String name;
int age;

 

@RequestBody List<dto> dto 이런식으로 선언해주면 

list형태로 파라미터 값이 담겨서 controller에서 처리할 수 있다.

 

 

 

 

 

 

* 개인 기록용으로 잘못된 부분이 있다면 댓글 달아주시면 감사하겠습니다.

좋아요 눌러주세용 *^^*

728x90