코드 오류 수정

yeezze·2022년 3월 8일
0

무물컴 프로젝트

목록 보기
1/3

하핫 어제 클라이언트분께서 오류를 발견해서 카톡을 날려주셨다.
API 조회가 제대로 안된다는 뭐 그런 오류였는데 받자마자 머리를 엄청 굴리면서 뭘 잘못 한거지!!!!!!!!!!!!!!! 하고 열심히 수정했다는 그런 이야기...


무엇을 잘못했느냐.. 하면....

전체 답변 조회 API에서 답변의 이미지가 제대로 안 뜨는 것 같다!!!

왜지!!!! 왤까!!!!????? sql문은 분명 제대로 짠 것을 확인했는데 왤까
지하철에서 집 가면서 곰곰히 생각해봤는데 스프링 코드 쪽에 뭔가 오류가 있을 것 같았다.

기존 코드

쿼리문을 돌렸을 때 이미지 url이 null 값이면 NPE로 넘겨서 빈 리스트를 생성해주고,
이미지 url이 존재하면 리스트로 넣어주는 코드였다.

저번에 코드를 짤 때 테스트를 할 때는 API 반환 답변이 딱 1개만 조회되는 걸로 테스트를 했기 때문에 정상적으로 돌아가는 것처럼 보였다.
But.. 여러개의 답변들을 조회할 때 1개라도 null 값이 존재하면 무조건 NPE로 넘어가서 모든 답변 이미지 url이 빈 리스트로 생성되는 오류가 생기는 것이었다.

하 생각을 하자 생각을 !! ㅠ^ㅠ

바꾼 코드

NPE를 사용하지말고 if문으로 걸러서 처리하도록 변경했다.
기존에 코드를 짤 때도 if문을 사용하려고 했었는데 jdbc템플릿이랑 같이 하려니까 복잡해서 포기했던 것 같기도 하고.. 오래되서 사실 잘 기억은 안 남 ㄱ-

하여튼!

return this.jdbcTemplate.query(getReplyListQuery,
	(rs, rowNum) -> {
                         GetReplyRes getReplyRes;
                         if(rs.getString("replyImgUrl") != null) {
                                 getReplyRes = new GetReplyRes(
                                         rs.getLong("replyIdx"),
                                         rs.getLong("questionIdx"),
                                         rs.getLong("userIdx"),
                                         rs.getString("nickname"),
                                         rs.getString("profileImgUrl"),
                                         rs.getString("createdAt"),
                                         rs.getString("replyUrl"),
                                         rs.getString("content"),
                                         Arrays.asList(rs.getString("replyImgUrl").split(",")),
                                         rs.getInt("likeCount"),
                                         rs.getInt("reReplyCount"),
                                         rs.getString("status"),
                                         rs.getString("isLiked"));
                             } else {
                             getReplyRes = new GetReplyRes(
                                         rs.getLong("replyIdx"),
                                         rs.getLong("questionIdx"),
                                         rs.getLong("userIdx"),
                                         rs.getString("nickname"),
                                         rs.getString("profileImgUrl"),
                                         rs.getString("createdAt"),
                                         rs.getString("replyUrl"),
                                         rs.getString("content"),
                                         Arrays.asList(),
                                         rs.getInt("likeCount"),
                                         rs.getInt("reReplyCount"),
                                         rs.getString("status"),
                                         rs.getString("isLiked"));
                             }
                             return getReplyRes;
                         }, userIdx, questionIdx);

이런 식으로 짰는데 람다식에 대한 활용법과 jdbcTemplate RowMapper 문법을 정확하게 알고 있지 않아서 조금 헤맸다..

내가 정확하게 모르는 것 (공부할 것)

java 람다식 활용법, jdbcTemplate RowMapper


오류 발견해서 알려주신 안드분께 넘 감사하다🥺 헝헝..

profile
백엔드 개발자 😊

0개의 댓글