[스프링부트 blogV1] 12. 상세페이지에 데이터 연결하기

silver's avatar
Dec 30, 2024
[스프링부트 blogV1] 12. 상세페이지에 데이터 연결하기

1. 쿼리스트링과 패스변수 : 주소로 데이터 찾기

쿼리스트링(where절) : unique하지 않은 것 예) /board?title=바다&…
패스변수(where절) : unique한 것 예) /board/1

REST API 설계 Rules 및 예시

  1. 소문자를 사용한다.
  1. 언더바(_) 대신 하이픈(-)을 사용한다.
  1. 마지막에 슬래시(/)를 포함하지 않는다.
  1. 행위를 포함하지 않는다.
  1. 파일 확장자는 URL에 포함시키지 않는다.
 
 

2. 상세페이지와 Controller 연결하기

BoardController

@GetMapping("/board/{id}") public String detail(@PathVariable("id") int id, Model model) { //(@PathVariable("id")의 id 생략가능하지만 오류를 대비해 써라 BoardResponse.DetailDTO boardDetail = boardService.게시글상세보기(id); model.addAttribute("model", boardDetail);//request객체(model)에 boardDetail담아야해 return "detail"; }
 

BoardService

public BoardResponse.DetailDTO 게시글상세보기(int id) { Board board = boardRepository.findById(id); return new BoardResponse.DetailDTO(board); }
 

BoardRepository

public Board findById(int id) { Query q = em.createNativeQuery("select * from board_tb where id = ?", Board.class); q.setParameter(1, id); // 물음표 완성하기( 물음표 순서, 물음표에 바인딩 될 변수값) return (Board) q.getSingleResult(); }
Board.class : 이 쿼리의 결과를 Board객체로 변환
q.setParameter(1, id); → 첫번째 “?”에 id 값을 넣겠다!!!
notion image
Object는 모든 class로 다운캐스팅 가능
 

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(); String createdAt = board.getCreatedAt().toString(); this.createdAt = board.getCreatedAt().toString(); // TODO: 2025.11.18 형태로 변경하기 } }
 
 
 
Share article

silver