유저 정보가 없는 유저의 데이터를 업데이트 및 삭제 시 200 OK가 출력되는 문제가 있었다. 예외처리를 별도로 해주지 않으면 존재하지 않는 데이터를 수정하거나 삭제하는 문제가 발생할 수 있다.
유저 정보가 있는지 확인하기 위해 데이터를 조회하는 기능이 선행되어야 한다.
데이터를 조회하는 readsql 변수를 작성해보자.
String readsql = "select*from user where id = ?";
jdbcTemplate.query(readsql,(rs,rowNum) -> 0, request.getId()).isEmpty();
request.getId()가 ?에 대입되어 데이터가 존재할 경우 0을 반환하고 그렇지 않을 경우 아무것도 반환하지 않는다.
isEmpty() 메서드로 0이 반환되면 false를, 그렇지 않으면 true를 반환한다.
반환값을 boolean형으로 받아줘야 하기 때문에 코드를 수정해야 한다.
String readsql = "select*from user where id = ?";
boolean isUserNotExist = jdbcTemplate.query(readsql,(rs,rowNum) -> 0, request.getId()).isEmpty();
이제 데이터값이 존재하지 않을 경우 즉, isUserNotExist가 true일 경우 예외를 던지는 코드를 작성해야 한다.
if(isUserNotExist){
throw new IllegalArgumentException()
}
- id를 기준으로 유저가 존재하는지 확인하기 위해 select 쿼리를 작성
- SQL을 날려 DB 데이터가 존재하는지 확인
- "id is ?" 자리에 request.getId()가 들어가고 select sql의 결과가 있으면 0을 반환
- 0은 최종적으로 [0]처럼 List로 반환
- 해당 id를 가진 유저가 없으면 비어있는 [] List를 반환
- if문으로 인해 [] List일 경우 IllegalArgumentException() 발생
유저 업데이트 API와 마찬가지로 데이터를 조회하는 쿼리를 포함시키면 된다.
다른 점은 매개변수가 name이므로 request.getId()가 아닌 name으로 변경되야 한다.
예외처리도 끝났으니 존재하지 않는 데이터를 업데이트/삭제 시 500이 출력이 되는지 POSTMAN으로 확인해보자.
우선, GetMapping 으로 저장한 데이터를 확인한다.
2개의 데이터가 user 테이블에 저장되어 있는 것이 확인되었다.
이제 존재하지 않는 데이터를 업데이트 해보자.
Mapping을 Put으로 바꾸고 RequestBody를 JSON 형식으로 하여 수정할 데이터를 입력한다.
예외처리를 발생시키기 위해 존재하지 않는 id = 3을 조건으로 넣었다.
정상적으로 500 error가 발생한다.
존재하는 데이터를 정상적으로 입력한다면 화면이 이렇게 출력이 된다.
이번에는 2개의 데이터 중 id가 2인 데이터를 삭제해보겠다.
Delete 방식으로 Mapping을 변경하고 조건은 name으로 하여 Park이라는 name의 데이터를 삭제해보겠다.
정상적으로 삭제되어 200 OK가 출력되었다.
데이터를 조회해보니 제대로 삭제가 되었다.
이번에는 존재하지 않는 데이터를 삭제해보자.
name이 Lee인 데이터를 삭제해보겠다.
500 error가 제대로 출력되는 것을 보아 예외처리가 잘 된 것을 알 수 있다.
PostMan을 사용하면서 존재하는 데이터인데도 500 error가 발생하는 경우가 있었는데 이 경우에는 SQL문을 다시 확인해보자. 나도 계속 500이 발생해서 200이 출력되어야 하는데 왜 그런가 해서 며칠 붙잡고 있었는데 단순히 내가 SQL을 잘못 작성한 것이었다.
id = ? 같은 경우 id is ? 이런식으로 작성한다던가 delete from user where ~을 delete user where ~ 이런식으로 잘못 작성하고 있었다.