2021. 8. 6. 18:42ㆍReact
리액트와 스프링 부트를 이용하여 클라이언트와 서버간의 데이터 통신을 구현을 시도하였다.
IDE는 리액트는 vsCode를 사용하였고, 스프링은 InteliJ를 사용하였다. 라이브러리 관리 도구로는 gradle을 사용하였다.
클라이언트와 서버의 데이터 통신을 위해 기본 셋팅을 하고 실행하였지만 결과는 org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 에러..
해당 에러가 발생한 과정과 해결한 과정을 기록해둔다.
1. 리액트 설정
2. 스프링 설정
3. 실행
먼저 스프링으로 서버를 켜준다음 리액트를 실행하였다.
하지만 결과를 출력하지 못하고 있다.... 뭐가 문제일까
4. 에러 해결 과정
일단 에러 코드를 확인해봤다.
UserApiController 진입
2021-08-06 17:39:05.534 WARN 8548 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]
다행히도 클라이언트에서 보낸 매핑정보를 서버에서 잘받아주는 상태였다.
에러코드 HttpMediaTypeNotAcceptableException: Could not find acceptable representation 라고 나온걸 보니 HttpBody정보의 미디어타입이 맞지 않는 것 같다. 일단 클라이언트에서 요청한 HttpBody정보와 서버에서 응답해주는 정보의 미디어 타입이 맞지 않다고 가정해봤다.
406에러, 역시나 http바디 정보를 받아 올 수 없다고 생각한 건 맞았다. 하지만 헤더정보를 확인하니 요청이나 응답이나 둘다 application/json을 주고 받을 수 있었다. 미디어타입의 문제는 아니라는거다 그럼 뭐때문에 데이터를 못받는 것일까.,
클라이언트와 서버가 정보를 json형식으로 받고 있으니 서버의 json의존설정의 문제가 아닐까 생각하고
json 라이브러리를 의존설정해주었다. 하지만 결과는 실패였다.. 그럼 뭐가 문제인 것일까?
일단 Status가 406에러이기 떄문에 해당 상태에 대해 더 알아보기 위해 구글에 검색해서 찾아봤다.
'HTTP 상태 406 – 받아들일 수 없음(Not Acceptable) 요청으로부터 받은 proactive negotiation 헤더에 따르면, 대상 리소스는 해당 user agent가 받아들일만한 현재의 representation이 없고, 서버 또한 기본 representation을 제공하지 않으려 합니다.'
위 글을 읽고 서버에서 요청후 응답으로 반영될 데이터가 없는것이 아닐까? 라는 생각이 들었다.
그렇게 객체 클래스를 확인해보니 getter나 롬복을 따로 설정을 안해둔것을 확인할 수 있었다!! 이러니 값을 불러올 수가 없지..
바로 @Getter 애노테이션을 설정해주었다. 그러고 다시 실행한 결과는..
성공!! 드디어 서버 데이터를 리액트를 통해 불러오게 되었다.