로그인을 하지 않은 유저가 게시글을 상세 조회 했을 때, 좋아요 여부와 팔로우 여부는 false 값으로 처리가 되는 로직을 구현해야했습니다. 그리고 member 값이 null 로 들어가도 nullpointerException이 발생하지 않게 예외 처리를 해줘야했습니다.

 

게시글과 콜라보 조회 시에 발생하는 문제였습니다. 

 

member 값을 받아와야 해당 유저의 정보를 확인해서 팔로우를 했는지, 좋아요를 했는지를 알 수 있는데 로그인을 하지 않은 유저라면 member 값을 불러 올 수가 없어서 null로 뜨게 되서 NullPointerException이 발생합니다. 아래와 같이 NullPointerException을 처리했습니다.

Controller

@GetMapping("/details/{postid}")
public ResponseEntity<SuccessResponse<Object>> infoPost(@PathVariable Long postid, @AuthenticationPrincipal CustomUserDetails userDetails){
    Member member = null;
    try {
        member = userDetails.getMember();
    }catch (NullPointerException e){
        log.info("비로그인 사용자 접근 : infoPost");
    }
    return SuccessResponse.toResponseEntity(INFO_POST,postService.infoPost(postid, member));
}
  • @Slf4j 을 사용해서 log를 찍었습니다.
  • try-catch문을 사용하여서 NullPointerException 이 발생하면 log를 띄워주었습니다.
  • member 값은 null로 초기화 했습니다.

 

Service

@Transactional
public InfoPostDto infoPost(Long postid, Member member) {
    Post post = postRepository.findById(postid).orElseThrow(
            () -> new NotFoundException(POST, SERVICE,POST_NOT_FOUND)
    );

    post.viewCount();

    postRepository.save(post);

    Boolean isLiked = false;

    if(member!=null){
    Member postMember = memberRepository.findByNickname(post.getNickname()).orElseThrow(
            () -> new NotFoundException(POST, SERVICE, MEMBER_NOT_FOUND)
    );

    PostLikeCompositeKey postLikeCompositeKey
            = new PostLikeCompositeKey(member.getId(), postMember.getId() );
    if (postLikeRepository.findById(postLikeCompositeKey).isPresent()){
        isLiked = true;
    }
    }

    return new InfoPostDto(post, isLiked);
}
  • if문을 사용해서 member가 null이 아닌 경우, 좋아요 여부를 반환합니다.
  • null 인 경우에는 초기값인 false를 반환합니다.

 

 


이번주 토요일에 중간 발표가 있습니다. 여러모로 착착 진행되고 있습니다. 프론트와 소통해서 자잘한 에러를 수정하거나 api를 수정하고 있습니다.

+ Recent posts