반응형
상세 페이지에서 입력한 답변(댓글)을
실제로 데이터베이스에 저장하려면
컨트롤러와 서비스 계층에서 로직을 구현해야 합니다.
답글이 등록되면 해당 질문의 상세 페이지로 바로 이동시키는 것이 일반적입니다.
📌 예제 코드
AnswerController.java
package com.mysite.sbb.answer;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.mysite.sbb.question.Question;
import com.mysite.sbb.question.QuestionService;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@RequestMapping("/answer")
@Controller
public class AnswerController {
private final QuestionService questionService;
private final AnswerService answerService;
public String createAnswer(Model model, @PathVariable("id") Integer id, @RequestParam("content") String content) {
Question question = this.questionService.getQuestion(id);
this.answerService.create(question, content);
return String.format("redirect:/question/detail/%s", id);
}
}
AnswerService.java
package com.mysite.sbb.answer;
import java.time.LocalDateTime;
import org.springframework.stereotype.Service;
import com.mysite.sbb.question.Question;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Service
public class AnswerService {
private final AnswerRepository answerRepository;
public void create(Question question, String content) {
Answer answer = new Answer();
answer.setContent(content);
answer.setCreateDate(LocalDateTime.now());
answer.setQuestion(question);
this.answerRepository.save(answer);
}
}
💬 코드 설명
- AnswerController
- /answer로 시작하는 요청을 처리합니다.
- createAnswer 메서드는
- 폼에서 받은 질문 id(@PathVariable("id"))와 답글 내용(@RequestParam("content"))을 받아
- 해당 질문을 조회하고
- AnswerService를 통해 답변을 생성합니다.
- 등록이 완료되면 해당 질문의 상세 페이지로 리다이렉트합니다.
- 실제 운영 시에는
@PostMapping("/create/{id}")
같은 애너테이션을 추가하는 것이 일반적입니다.
(생략된 경우 꼭 추가해 주세요!)
- AnswerService
- 실제 답변 객체를 만들어 저장하는 역할만 담당합니다.
- 답변의 작성일, 본문, 연결된 질문 정보를 세팅한 뒤 저장합니다.
💡포인트 정리
- 폼 입력값은 @RequestParam으로 받는다.
- 질문 id는 @PathVariable로 URL 경로에서 추출한다.
- 서비스 계층에서 객체 생성 및 저장 로직을 담당한다.
- 답변 등록 후, 다시 질문 상세 페이지로 리다이렉트하여
방금 쓴 답글을 바로 확인할 수 있다.
📌정리하자면, 답글 등록 요청을 받아, 실제로 데이터베이스에 저장하고
사용자가 자연스럽게 상세 페이지로 이동하도록
컨트롤러와 서비스 계층을 구현했습니다.
이제 실전 게시판에서
댓글(답변) 기능의 기본 뼈대가 갖춰졌습니다.
'Spring > 실습 정리' 카테고리의 다른 글
Spring Boot 16강 - Bootstrap 카드 레이아웃으로 질문 상세/댓글 화면 꾸미기 (0) | 2025.07.03 |
---|---|
Spring Boot 15강 - Thymeleaf 레이아웃과 Bootstrap으로 게시판 화면 꾸미기 (1) | 2025.07.03 |
Spring Boot 14강 - 상세 페이지에서 답변(댓글) 목록 출력하기 (1) | 2025.07.02 |
Spring Boot 12강 - 상세 페이지에서 질문 내용 출력과 답글 작성 폼 만들기 (0) | 2025.07.02 |
Spring Boot 11강 - 상세 페이지 구현과 NotFound 예외 처리 (0) | 2025.07.02 |
Spring Boot 10강 - Thymeleaf로 질문 목록 테이블 출력하기 (0) | 2025.07.02 |