본문 바로가기
기록해보기

유저 업데이트 API, 삭제 API 예외 처리하기

by titlejjk 2023. 6. 4.

MySQL에 분명히 아무것도 없는데 수정 그리고 삭제가 200OK를 출력해주고 있다.

이러면..

어떻게 해야지 200OK가 출력이 안되도록할까?

API에서 예외를 던지도록 해보자.

간단하게 삭제할 error-test를 해보겠다.

@GetMapping("/user/error-test")
    public void erroTest(){
        throw new IllegalArgumentException();
    }

서버를 재시각 해주고

POST MAN을 이용해 예외를 처리해보았다. 500Internal Server Error이 예외처리로 출력이 되었다.

UpdateAPI와 DeleteAPI에서 데이터의 존재여부를 확인한 다음 예외를 던지고 예외가 없다면 500이아닌 200OK를 출력해보도록해서 예외처리를 해보겠다.

Update API먼저 수정해보겠다 가장먼저 데이터가 존재하는 지 확인을 해본다.

조회용 sql을 작성해준다.

String readSql = "SELECT * FROM user WHERE id = ?";

id를 통해 sql을 조회해 주고

jdbcTemplate.query(readSql, (rs,rowNum) -> 0, request.getId());

jdbcTemplate.query()안에 조회 sql을 넣어주고 조회됐을 때 결과가 있으면 무조건 0을 반환하도록 한다. 그리고 물음표에 값을 넣어주기 위해 request.getId()를 가져온다.

위에sql문은 물음표를 사용하기 위해 request.getId()를 사용한 것이고

(rs, rowNum) 은 결과가 하나라도 있다면 0이라고 간주하는 것인데

위 코드 전체가 list이기 때문에 데이터가 있다면 0이 담겨있는 list가 나올 것이고 비어있다면 비어있는 list가 나오게 된다.

그 다음 위 코드를 boolean코드로 만들어 주고 존재하지 않는 경우는 조회에 결과가 비어있으면 true가 나오도록 만들어주는 코드로 작성을 한다.

boolean isUserNotExist = jdbcTemplate.query(readSql, (rs,rowNum) -> 0, request.getId()).isEmpty();

그리고 이를 활용해 if문을 적어주자면

if(isUserNotExist){
            throw new IllegalArgumentException();
        }

isUserNotExitst가 true를 반환하면 Exception을 던지도록 써주었다.

1번은 id를 기준으로 유저가존재하는지 확인하기 위해 SELECT쿼리를 작성해주었고.

2번은 SQL을 날려 DB에 데이터가 있는지 확인을 해 준다.

이 코드가 가장 어려웠다.. 해석을 해보자면

readSql에 있던 물음표 자리에 reqeust.getId가 들어가고

SELECT SQL에 결과가 있으면 0으로 변환이 되도록 해준다.

그리고 query는 최종적으로 반환된 값을 List로 감싸준다.

결과적으로 해당 id를 가진 유저가 있으면 0이 담긴 List가 나오고 

해당 id를 가진 유저가 없다면 빈 List가 나오게 된다. 그리고 if문을 통해 Exception을 날려준다.

PostMan을 통해 확인해보자.

먼저 "A"라는 user를 만들어 준후에 확인을 해 주면

이 뜬다 다시 sql에서 조회도 해보자!

잘 바뀌어 있는 것도 확인!

이번에는 없는 user로 테스트 해보겠다.

삭제 API에도 적용시켜 보겠다.

위에 썼던 코드를 복붙하면 되겠지만 삭제 API는 name을 기준으로 검색했기 때문에 이름으로 코드를 변경해서 작성해주면 된다.

  @DeleteMapping("/user")
    public void deleteUser(@RequestParam String name){
        String readSql = "SELECT * FROM user WHERE name = ?";
        boolean isUserNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty();
        if(isUserNotExist){
            throw new IllegalArgumentException();
        }
        String sql = "DELETE FROM user WHERE name =?";
        jdbcTemplate.update(sql, name);
    }

 

댓글