하핫 어제 클라이언트분께서 오류를 발견해서 카톡을 날려주셨다.
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
오류 발견해서 알려주신 안드분께 넘 감사하다🥺 헝헝..