728x90

 

 

현재 환경

서버 : 로컬 스프링부트 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

 

복사했습니다!