이번에는 책 정보를 읽어서 응답으로 내보내기 위한 DTO 객체를 만들어 보겠습니다.굳이 엔티티를 직접 사용하지 않고 응답 객체를 따로 정의하는 이유는 실제 HTTP 응답이 테이블 하나만 대상으로 하는 경우는 거의 없기 때문입니다. 많은 경우 여러 엔티티에서 필요한 필드만 뽑아내서 조합시켜서 응답하기 때문에 응답별로 엔티티 집합을 묶어주는 응답 DTO가 필요합니다.com.yse.dev.book.dto 패키지에 BookReadResponseDTO 클래스를 생성해 주세요.src/main/java > com.yse.dev.book.dto > BookReadResponseDTO.javaCopypackage com.yse.dev.book.dto; import java.time.LocalDateTime; impo..
책 입력 기능 만들기에서 http://localhost:8080/book/read/{bookId} 주소는 404 오류 페이지를 보여줬었습니다. 보기 싫으니까 404 (Page Not Found) 화면 대신 책 상세 정보를 보여주기 위한 화면을 만들어보겠습니다.
책 입력 기능을 만들면서 entity, service, dto 등 여러 패키지를 만들었습니다. 그런데 제일 처음 만들었던 컨트롤러 클래스 BookController.java는 특별한 패키지 없이 com.yse.dev > book 패키지 안에 있네요. 일관성을 맞추기 위해 com.yse.dev.controller 안으로 옮겨보겠습니다.src/main/java > com.yse.dev.book 패키지 아래에 controller 패키지를 생성합니다.패키지 익스플로어에서 BookController.java 파일을 선택하고 com.yse.dev.book.controller 패키지로 드래그하면 STS에서 클래스 파일 이동 옵션 팝업이 나옵니다.OK 버튼을 클릭해서 BookController.java 파일을 com...
서버를 재시작하고 http://localhost:8080/book/create 에 접속합니다. 이후 제목과 가격을 입력하고 저장 버튼을 클릭해 봅시다.404 오류 페이지가 나오네요! 다행히 뭔가 잘못된 것은 아닙니다. 우리는 저장 후 /book/read/{bookId} 경로로 이동하게 프로그램을 만들었는데, 아직 /book/read/{bookId} 경로에 해당하는 컨트롤러 메소드를 만들지 않았기 때문입니다.오류 페이지는 신경쓰지 말고 몇번 더 테스트해 봅시다. 제목과 가격을 입력하고 저장 버튼을 누르는 과정을 몇번 더 반복해 보세요.데이터가 잘 입력되었는지 확인하기 위해 h2-console http://localhost:8080/h2-console에 접속합니다.로그인 후 왼쪽 패널에서 BOOK 테이블을 ..
책 입력화면 만들기에서 만들었던 BookController 클래스에 메소드를 추가합니다.src/main/java > com.yse.dev.book > BookController.java@PostMapping("/book/create") public String insert(BookCreateDTO bookCreateDTO) { Integer bookId = this.bookService.insert(bookCreateDTO); return String.format("redirect:/book/read/%s", bookId); } @PostMapping 어노테이션은 http 요청 메소드 중 POST 메소드로 요청될 때만 아래의 메소드가 실행된다는 의미입니다.@PostMapping( PO..
컨트롤러에서 서비스 클래스를 사용하기 위해서 의존성을 주입해 보겠습니다.src/main/java > com.yse.dev.book > BookController.java@Autowired private BookService bookService; 이제 BookController 코드는 다음과 같아집니다.Copypackage com.yse.dev.book; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import com.yse.dev.b..