현재 환경
서버 : 로컬 스프링부트 9000포트 서버
DB : AWS RDS
🚨 Error 발생
ID로 회원을 검색하는 API와 닉네임으로 회원을 검색하는 API를 생성했는데 각각 하나씩 살아있을 때는 잘 정상작동하지만
둘이 같이 살아있으면 500에러가 뜨는 현상이 발생하였다.
에러코드를 보니
through reference chain 즉 계속 돌고있다는 뜻의 에러 문구가 보였다. 즉 어떤 값에 들어갈지 몰라 헤메고 있다는 뜻이다.
스프링부트는 같은 @RequestMapping에 @GetMapping으로 연결되어 줄 때는 path를 명확히 지정해주지 않으면 어떤 값에 들어가야할지 몰라 500에러가 뜨게 된다는 사실을 알게되었다.
따라서 두개의 API를 RESTful(?)하게 경로를 지정해주어 에러를 해결하였다.
✅ Error해결
(변경 전) ID로 회원조회 API
@ResponseBody
@GetMapping("/{userId}") // (GET) 127.0.0.1:9000/app/users/:userIdx
public BaseResponse<GetUserRes> getUser(@PathVariable("userId") int userId) {
// Get Users
try{
GetUserRes getUserRes = userProvider.getUser(userId);
return new BaseResponse<>(getUserRes);
} catch(BaseException exception){
return new BaseResponse<>((exception.getStatus()));
}
}
(변경 후) ID로 회원조회 API
@ResponseBody
@GetMapping("/userId/{userId}") // (GET) 127.0.0.1:9000/app/users/:userIdx
public BaseResponse<GetUserRes> getUser(@PathVariable("userId") int userId) {
// Get Users
try{
GetUserRes getUserRes = userProvider.getUser(userId);
return new BaseResponse<>(getUserRes);
} catch(BaseException exception){
return new BaseResponse<>((exception.getStatus()));
}
}
(변경 전) 닉네임으로 회원조회 API
@ResponseBody
@GetMapping("/{userNickname}") // (GET) 127.0.0.1:9000/app/users/:userNickname
public BaseResponse<GetUserRes> getUserbyNickname(@PathVariable("userNickname") String nickName){
try {
GetUserRes getUserRes = userProvider.getUserbyNickname(nickName);
return new BaseResponse<>(getUserRes);
} catch (BaseException exception){
return new BaseResponse<>((exception.getStatus()));
}
}
(변경 후) 닉네임으로 회원조회 API
@ResponseBody
@GetMapping("/userNickname/{userNickname}") // (GET) 127.0.0.1:9000/app/users/:userNickname
public BaseResponse<GetUserRes> getUserbyNickname(@PathVariable("userNickname") String nickName){
try {
GetUserRes getUserRes = userProvider.getUserbyNickname(nickName);
return new BaseResponse<>(getUserRes);
} catch (BaseException exception){
return new BaseResponse<>((exception.getStatus()));
}
}
👌 정상작동 확인
GET 메소드로 localhost:9000/app/users/userNickname/:userNickname
Path Variable 값으로 키에 userNickname value에 stark로 해당 데이터 조회 성공
Reference:
https://apeltop.blogspot.com/2018/04/rest-api-json.html
https://shsewonitw.github.io/devlog/2019-08-02-RestAPI_Error/
https://pjh3749.tistory.com/273