[게시판]5. 글상세보기

gov's avatar
Nov 18, 2024
[게시판]5. 글상세보기
💡
글상세보기 구현
날짜 형태 변경 -시간 제외하기

진행방향

  1. cs 만들기 : list파일 복붙 후, <section> 바꾸기
    1. <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>blog</title> </head> <body> <nav> <ul> <li> <a href="#">홈</a> </li> <li> <a href="#">글쓰기</a> </li> </ul> </nav> <hr> <section> <div> 번호 : {{model.id}} <br> 제목 : {{model.title}} <br> 내용 : {{model.content}} <br> 작성일 : {{model.createdAt}} <br> </div> </section> </body> </html>
  1. BoardController 기능 추가
    1. RESTful API 설계 : 주소로 자원을 찾는 방법 대화처럼 인식하기, 쿼리스트링과 패스변수를 적절히 혼합하여 사용
       
      주소 형태로 데이터 받기: 주소는 모두 where절에 걸림(where절 = 쿼리문 조건절)
      • 쿼리스트링(where절): /board?title=바다 (제목이'바다'인 글을 찾아줘) 기본키나 유니크 하지않을 때. ?key=value 형태. &(and) 사용가능
      • 패스변수(where절): /board/1 (id값이 1인 글을 찾아줘) 유니크(pk)할 때. URL의 경로 일부를 변수로 사용
      @GetMapping("/board/{id}") // 중괄호있으면, public String detail(@PathVariable("id") int id, Model model) { // 어노테이션 vaule값 필요 // model을 리퀘스트 객체에 넣어야 꺼내 쓰기 편함 > Model model 추가 BoardResponse.DetailDTO boardDetail = boardService.게시글상세보기(id); model.addAttribute("model", boardDetail); return "detail"; }
  1. BoardResponse DetailDTO 생성
    1. @Data public static class DetailDTO { private int id; private String title; private String content; private String createdAt; public DetailDTO(Board board) { this.id = board.getId(); this.title = board.getTitle(); this.content = board.getContent(); // TODO: 2.24.11.18 형태로 변경하기 this.createdAt = board.getCreatedAt().toString(); } }
  1. BoardService ‘게시글상세보기’메서드 작성 개발 진행방향: 다같이 vs코드로 모든 화면 만들고, 레이어 순서대로 코드 세분화
    1. 추천 방향: 반대로 만들기. 1.레파지토리>2.컨트롤러>3.서비스
      public BoardResponse.DetailDTO 게시글상세보기(int id) { Board board = boardRepository.findById(id); // 바로 return 불가능>DTO return new BoardResponse.DetailDTO(board); }
  1. BoardRepository ’findById’ 쿼리문 및 메서드 작성
    1. public Board findById(int id) { Query q = em.createNativeQuery("select * from board_tb where id = ?", Board.class); q.setParameter(1, id); // 물음표 완성하기 (물음표 순서, 물음표에 바인딩될 변수값) // (Board) : 다운캐스팅. getSingleResult 타입은 object return (Board) q.getSingleResult(); // 한개만 반환 }

결과

notion image
notion image

날짜 형태 변경 -코드

해당 코드를 이용해 직접 해보기 - _core 패키지 따로 만든 후, 클래스 생성
import java.text.SimpleDateFormat; import java.util.Date; Date createdAt = board.getCreatedAt(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); String formattedDate = sdf.format(createdAt); this.createdAt = formattedDate;
  1. 새로운 패키지 _core 생성 따로 클래스를 만들어 날짜 인코딩 여러 곳 사용가능 및 패키지를 따로 파서 기능 구별함
    1. Encoding 클래스 생성
    2. package com.example.blog._core; import com.example.blog.Board.Board; import java.text.SimpleDateFormat; import java.util.Date; public class Encoding { // Board 객체 받아 createdAt를 "yyyy.mm.dd" 형태 반환하는 메서드 public static String formatToStr(Board board) { // Board 객체에서 createdAt을 가져와서 포맷 Date createdAt = board.getCreatedAt(); SimpleDateFormat date = new SimpleDateFormat("yyyy.MM.dd"); return date.format(createdAt); // 포맷된 날짜 문자열 반환 } }
  1. BoardResponse 수정
@Data public static class DetailDTO { private int id; private String title; private String content; private String createdAt; public DetailDTO(Board board) { this.id = board.getId(); this.title = board.getTitle(); this.content = board.getContent(); // Encoding클래스의 날짜변환 메서드 가져와 적용 this.createdAt = Encoding.formatToStr(board); } }

날짜 형태 변경 -출력 확인

notion image
Share article

goho