IT/Spring Boot
[Spring Boot] 11. 답변 기능 추가하기
우웅지
2024. 4. 11. 16:50
728x90
반응형
SMALL
답변 기능 만들기
답변 텍스트 창과 등록 버튼 만들기
question_detail.html
<h1 th:text="${question.subject}">제목</h1>
<div th:text="${question.content}">내용</div>
<form th:action="@{|/answer/create/${question.id}|}" method="post">
<textarea name="content" id="content" rows="15"></textarea>
<input type="submit" value="답변 등록">
</form>
답변 등록 컨트롤러 만들기
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.PostMapping;
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;
@RequestMapping("/answer")
@RequiredArgsConstructor
@Controller
public class AnswerController {
private final QuestionService questionService;
@PostMapping("/create/{id}")
public String createAnswer(Model model, @PathVariable("id") Integer id,
@RequestParam(value = "content") String content) {
Question question = this.questionService.getQuestion(id);
// TODO : 답변을 저장한다.
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);
}
}
이제 만든 AnswerService를 AnswerController에서 사용해보자.
AnswerService.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.PostMapping;
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;
@RequestMapping("/answer")
@RequiredArgsConstructor
@Controller
public class AnswerController {
private final QuestionService questionService;
private final AnswerService answerService;
@PostMapping("/create/{id}")
public String createAnswer(Model model, @PathVariable("id") Integer id,
@RequestParam(value = "content") String content) {
Question question = this.questionService.getQuestion(id);
// TODO : 답변을 저장한다.
this.answerService.create(question, content);
return String.format("redirect:/question/detail/%s", id);
}
}
답변 등록하기 결과
질문 상세페이지에 답변 표시하기
원래 있던 답변들을 질문 아래에 표시하기 위해 question_detail.html 을 수정해보자.
question_detail.html
<h1 th:text="${question.subject}">제목</h1>
<div th:text="${question.content}">내용</div>
<h5 th:text="|${#lists.size(question.answerList)}개의 답변이 있습니다.|"></h5>
<div>
<ul>
<li th:each="answer : @{question.answerList}" th:text="${answer.content}"></li>
</ul>
</div>
<form th:action="@{|/answer/create/${question.id}|}" method="post">
<textarea name="content" id="content" rows="15"></textarea>
<input type="submit" value="답변 등록">
</form>
결과
728x90
반응형
LIST