티스토리 뷰
이번엔 게시글 조회가 안되네,,?
그런데 이번엔 회원 탈퇴처리를 한 후에 게시글을 조회해봤더니
NullPointerException이 발생하였다.....
회원이 탈퇴함에 따라 게시글과 연결된 회원 정보가 'null'로 설정된 것 까지는 잘 했는데,,,
이 상황에서 발생한 NullPointerException 오류는 게시글을 조회하는 과정에서 해당 게시글을 작성한 회원의 정보를 참조하려고 했으나, 회원 정보가 이미 'null'로 설정되어 있기 때문에 발생한 것이다. 즉 회원 정보가 'null'이 될 수 있다는 점을 체크하지 않고 회원 정보가 있을 때만을 고려하여 (null이 아닐 때만을 고려하여) 코드 구현을 했기 때문이다..!!
trace를 보니 DTO 변환 로직을 수정해야 함을 알 수 있었다.
즉 ArticleResponseDto.createArticleDto 메소드를 수정하여 null 상황을 안전하게 처리하도록 변경하여, 게시글의 회원 정보가 null이라면 이를 감안한 로직을 구현하면 된다.
해결방법
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import teamFive.freshmanCommunity.entity.Major;
public class MemberInfoDto {
private Long id;
private String memberName;
private String studentId;
private Major major;
public static MemberInfoDto createMemberDto(Member member){
return new MemberInfoDto(
member.getId(),
member.getMemberName(),
member.getStudentId(),
member.getMajor()
);
}
}
먼저, MemberInfoDto 클래스를 만들었다. 이 dto는 게시글과 연결된 회원의 ID, 이름, 학번, 전공 등의 기본 정보를 포함하고 있다. 이 dto는 게시글 조회의 응답 dto인 articleReadDto에서 사용된다. 또한 createMemberDto 생성 메서드도 만들어주었다.
public static ArticleResponseDto createArticleDto(Article n) {
MemberInfoDto memberInfo = n.getMember() != null ?
MemberInfoDto.createMemberDto(n.getMember()) : null; //Member가 null인 경우 MemberInfo를 null로 설정
return new ArticleResponseDto(
n.getId(),
n.getTitle(),
n.getContent(),
n.getBookmarkCount(),
n.getCreateDate(),
memberInfo,
n.getMajor()
);
}
그리고 게시글 조회의 응답 dto인 ArticleResponseDto의 createArticleReadDto인 생성 메서드에 위에서 만들어둔 memberInfo를 이용하여 'null'을 안전하게 처리하는 로직을 구현하였다. 이를 통해 회원 정보가 'null'인 경우에도 시스템이 정상적으로 작동하게 해주었다.
Java의 삼항 연산자 (조건) ? (참일 때의 결과) : (거짓일 때의 결과) 형식을 사용하여
n.getMember() 메서드 호출 결과가 null이 아니라면, 즉 회원 정보가 존재한다면, createMemberDto(n.getMember())를 호출하여 해당 회원의 정보로 MemberInfoDto 객체를 생성하였다. 만약 회원 정보가 null이라면, 즉 게시글에 연결된 회원 정보가 없다면, memberInfo 변수에 null을 할당해주었다.
다시 포스트맨으로 게시글 조회를 해보면, 회원이 탈퇴해도 NullPointerException 오류가 발생하지 않고 null로 잘 뜨는걸 확인할 수 있다!!
휴,,, 개발을 하다보면 생각지 못한 오류들이 너무 많다. 그치만 또 다 처리하고 해결하면 더 뿌듯함이 큰 거 같다.
계속 파이팅!
'Spring' 카테고리의 다른 글
객체 생성 - 정적 팩토리 메서드와 빌더 패턴 (1) | 2024.04.15 |
---|---|
스프링(자바) 키워드 모음 #1 (1) | 2024.04.09 |
스프링 커뮤니티 만들기 #9 - 회원탈퇴 시 오류해결 (외래키 제약조건) (2) | 2024.03.03 |
스프링 커뮤니티 만들기 #8 북마크 목록 조회 (0) | 2024.03.03 |
스프링 커뮤니티 만들기 #7 - 게시글 북마크 (0) | 2024.03.03 |
- Total
- Today
- Yesterday
- 스프링부트
- 다이나믹 프로그래밍
- 스프링
- SQL
- 영속
- 백준
- 백준 파이썬
- 파이썬
- 준영속
- 자바
- 북마크
- 웹MVC
- 로그아웃
- SQLD
- elasticsearch
- 지연로딩
- 회원탈퇴
- 스프링 북마크
- EnumType.ORDINAL
- SQL 레벨업
- 스프링 커뮤니티
- 웹 MVC
- DP
- 로깅
- 커뮤니티
- 비영속
- 프론트엔드
- 자바 스프링
- 인텔리제이
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |