1. URL 받아오기
- 커뮤니티 사연보기 >>일반고민을 눌렀을 때
@GetMapping("comm/comm/category")
public String communityByCategory(@RequestParam("category") CommCategory category, Model model) {
System.out.println("category = " + category);
// List<Comm> comms = commService.getCommsByCategory(category);
return "/comm/comm-main-German";
}
<a class="nav-link {{#categoryHelper.isActiveCategory}}GENERAL_CONCERNS{{/categoryHelper.isActiveCategory}}" href="
comm/comm/category?
category=GENERAL_CONCERNS">일반고민</a>

값 받기 성공
2. 컨트롤러에서 다른 카테고리도 받아오기
⇒ 같은 방식으로 머스테치에 URL 적용
⇒ 값 받기 성공

⇒ 주석 해제
서비스에서 값 받기
@GetMapping("comm/comm/category")
public String communityByCategory(@RequestParam("category") CommCategory category, Model model) {
List<Comm> comms = commService.getCommsByCategory(category);
return "/comm/comm-main-German";
}
//서비스
public List<Comm> getCommsByCategory(CommCategory category) {
commRepository.findByCategory(CommCategory.GENERAL_CONCERNS);
return null;
}

실행이 잘 되었다. 서비스도 값을 잘 받았다.
클릭했을 때 반응이 없다? 왜 반응이 없는지 확인.
리포 테스트 만들기


결과 보기 예상한 결과 확인
다른 카테고리도 넣어서 예상한 결과 확인 다 확인

다른 카테고리도 조회 ok

DTO 만들어서 화면에 뿌리자
@GetMapping("/comm")
public String community(HttpServletRequest request) {
List<CommResponse.ALLCommWithRepliesDTO> allCommsWithReplyList = commService.findAllCommWithReply();
request.setAttribute("allCommsWithReplyList", allCommsWithReplyList);
return "/comm/comm-main";
}
@GetMapping("comm/category")
public String communityByCategory(@RequestParam("category") CommCategory category, Model model) {
List<CommResponse.CommMainByCategory> allCommsWithReplyList = commService.getCommMainByCategory(category);
model.addAttribute("allCommsWithReplyList", allCommsWithReplyList);
return "/comm/comm-main";
}
//한 화면이니까 같은 것으로 뿌려야 혼동이 없겠지! 그래서 같은 이름으로 뿌림
//하지만 같은 dto는 아님 , 다음에 수정해야 할 수도 있으니!!!-v
DTO가 필요한 이유
필요한 것을 한 번에 뿌리기 위해
그리고 꼭 붙어있어야하는 로직들이 있는데 이것들을 여러 개를 한 번에 리턴을 못하니까 담아서 리턴함.
예를 들어 아래와 같은 로직들은 꼭 붙어 있어야 함.
@Transactional
public CommResponse.CommDetailDTO getCommDetail(int id) {
// 주어진 ID로 게시글을 가져옵니다.
Comm comm = commRepository.findById(id)
.orElseThrow(() -> new Exception404("게시물을 찾을 수 없습니다"));
// 주어진 게시글의 댓글을 가져옵니다.
List<Reply> replies = replyRepository.findByCommId(comm.getId());
// 같은 카테고리의 다른 글들과 해당 글들의 댓글을 가져옵니다.
List<Comm> relatedComms = commRepository.findByCategoryWithRepliesAndExcludeId(comm.getCategory(), comm.getId());
// CommDetailDTO 생성 및 timeAgo 계산
CommResponse.CommDetailDTO commDetailDTO = new CommResponse.CommDetailDTO(comm, replies, relatedComms);
commDetailDTO.getCommDTO().calculateTimeAgo(); // timeAgo 계산
return commDetailDTO;
}
서비스는 왜 필요한가?
DTO에 담아서 뿌리려고.
application.yml
서비스에서 레이지로딩을 끝내고 컨트롤러에 보낸다. 뭘로? DTO로
open-in-view: false
레이지로딩은 필요할 때에 로딩, eager는 한꺼번에 다 조회.
ctrl + shift + z : 앞으로 당기기
Share article