강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

박성욱님의 프로필 이미지
박성욱

작성한 질문수

[개념은 호옹~, 실습 빡] 스프링 부트, 입문!

23 댓글 서비스와 컨트롤러(댓글 REST API도 만들어주세요!)

23강 댓글 생성 메소드 오류

작성

·

26

·

수정됨

0

23강에서 클래스 CommentService에 들어있는 create 메소드(댓글 생성)가 잘 동작이 되지 않습니다.

 

강의에서 나오는대로 create 메소드를 작성하고 Talend API Tester 에서 데이터를 사진과 같이 작성하고 실행하니 정상적으로 작동하지 않고 500번 응답을 받습니다.

image.png

 

 

콘솔창에서 확인했을때, 다음과 같이 클래스 CommentService의 2번째 줄과

클래스 CommentApiController 의 2번째 줄이 잘못되었다고 합니다.

image.png

 

강의에서 알려준대로 코드를 치고 돌려봐도 안되서 강의를 3번 다시보면서 틀린코드가 없나 비교해봐도 도대체 뭐가 문제인지 모르겠습니다.

 


 

클래스 CommentService 에 create 메소드는 다음과 같이 작성하였습니다.

//< DTO 댓글을 엔티티 댓글로 생성해주는 메소드>
    @Transactional
    public CommentDto create(Long articleId, CommentDto dto) {
        // 게시글 조회 및 예외 발생
        Article article = articleRepository.findById(articleId)
                .orElseThrow(() -> new IllegalArgumentException("댓글 생성 실패! 대상 게시글이 없습니다.")); // 만약에 값이 없다면 예외를 발생시키겠다.

        // 댓글 엔티티 생성
        Comment comment = Comment.createComment(dto,article);

        // 댓글 엔티티를 DB로 저장 (** 애가 문제라고 뜹니다 ㅠㅠ**)
        Comment created = commentRepository.save(comment);

        // DTO로 변경하여 변환
        return CommentDto.createCommentDto(created);
    }

 

클래스 CommentApiController 에 create 메소드는 다음과 같이 작성하였습니다.

// 댓글 생성
@PostMapping("/api/articles/{articleId}/comments")
public ResponseEntity<CommentDto> create(@PathVariable Long articleId,@RequestBody CommentDto dto) {
    // 서비스에게 위임
    CommentDto createdDto = commentService.create(articleId, dto); // (** 애가 문제라고 뜹니다. ㅠㅠ **)
    // 결과 응답
    return ResponseEntity.status(HttpStatus.OK).body(createdDto);
}

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 박성욱님.

스프링 부트에서 REST API를 사용하면서 500 에러를 경험하신 점에 대해 설명드리겠습니다. 이 에러는 주로 서버 측에서 발생하는 문제로, 코드에 문제가 있거나 설정이 잘못된 경우가 많습니다. 아래와 같은 몇 가지 사항을 확인해보시길 추천드립니다:

  1. Request Body의 필드 명: JSON 요청의 필드 중 "article.id": 4 부분은 DTO나 엔티티와 필드명이 맞지 않을 수 있습니다. DTO에서는 articleId 혹은 article와 같은 형태로 정의되어 있을 가능성이 높으니, 이를 확인 후 수정해 보세요.

  2. 트랜잭션 관리: @Transactional이 잘 적용되어 있는지 확인하세요. 이 어노테이션은 데이터베이스와의 상호작용에서 트랜잭션 관리를 쉽게 해주는데, 적절히 적용되지 않으면 문제가 발생할 수 있습니다.

  3. 댓글 작성 논리 확인: 이미지는 주로 CommentService의 문제가 있음을 나타내고 있습니다. 이 서비스가 게시글을 조회하고 댓글을 생성하여 저장하는 과정을 확인해 보세요. 특히, Comment.createComment(dto, article) 메소드 내에서 모든 것이 제대로 처리되고 있는지를 확인하세요.

  4. 인스턴스 생성 및 매개변수 전달: Comment.createComment(dto, article) 메소드나 CommentDto.createCommentDto(created)와 관련해 내부에서 예외가 발생하고 있을 가능성이 있습니다. 이는 메소드 내의 코드와 매개변수를 자세히 검토하여 모든 값이 유효한지 확인해야 합니다.

위 사항들을 확인하시거나, 추가적인 에러 메시지, 관련 코드를 제공해주시면 더 정확한 도움을 받을 수 있습니다.

아래의 유사 질의 응답을 확인해보시면 도움이 될 수 있습니다:
- 19강 JSON create 메서드 질문이여!!
- 19강 Talend API POST 500 에러

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

박성욱님의 프로필 이미지
박성욱

작성한 질문수

질문하기