inblog logo
|
silver
    스프링부트

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

    silver's avatar
    silver
    Dec 30, 2024
    [스프링부트 blogV1] 12. 상세페이지에 데이터 연결하기
    Contents
    1. 쿼리스트링과 패스변수 : 주소로 데이터 찾기2. 상세페이지와 Controller 연결하기

    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
    Contents
    1. 쿼리스트링과 패스변수 : 주소로 데이터 찾기2. 상세페이지와 Controller 연결하기

    silver

    RSS·Powered by Inblog