블로그 만들기 19. error 구현: 동적 페이지로 만들기

Feb 06, 2024
블로그 만들기 19. error 구현: 동적 페이지로 만들기

1. form액션 보러가기

  • TYPE이 FORM : DTO가 두 개 필요
notion image
notion image
 

2. BoardController에 save주소 만들기

package shop.mtcoding.blog.board; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @Controller public class BoardController { private final HttpSession session; // DI private final BoardRepository boardRepository; // DI @PostMapping("board/save") //save 주소 만들기 public String save() { return "redirect:/index"; // 인덱스 페이지로 리다이렉션시키기 } // http://localhost:8080?page=0 @GetMapping({"/", "/board"}) public String index(HttpServletRequest request) { List<Board> boardList = boardRepository.findAll(); request.setAttribute("boardList", boardList); return "index"; } @GetMapping("/board/saveForm") // /board/saveForm Get요청이 옴 public String saveForm() { // session 영역에 접근하기 위한 // 1. session 영역에 sessionUser 키 값에 user 객체가 있는지 체크하기 User sessionUser = (User) session.getAttribute("sessionUser"); // 2. 값이 null이면 로그인 페이지로 리다이렉션 if (sessionUser == null) { return "redirect:/loginForm"; } // 3. null이 아니면 /board/saveForm으로 이동 return "board/saveForm"; } // select b.id, b.title, b.content, b.user_id, u.username from board_tb b inner join user_tb u on b.user_id = u.id where b.id = ? @GetMapping("/board/{id}") public String detail(@PathVariable int id, HttpServletRequest request) { System.out.println("id : " + id); // 바디 데이터가 없으면 유효성 검사 안해도 됨 BoardResponse.DetailDTO responseDTO = boardRepository.findById(id); request.setAttribute("board", responseDTO); return "board/detail"; } }
 

3. BoardRequest에 DTO 만들어서 BODY데이터 담기

package shop.mtcoding.blog.board; import lombok.Data; public class BoardRequest { @Data public static class SaveDTO { private String title; private String content; } }
 

4. BoardController에 정보 담기

package shop.mtcoding.blog.board; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @Controller public class BoardController { // HttpSession 객체를 참조 private final HttpSession session; private final BoardRepository boardRepository; // DI @GetMapping({"/", "/board"}) public String index(HttpServletRequest request) { User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser == null) { System.out.println("로그인 안된 상태입니다"); } else { System.out.println("로그인 된 상태입니다"); } List<Board> boardList = boardRepository.findAll(); request.setAttribute("boardList", boardList); // ("key", value) return "index"; } @GetMapping("/board/saveForm") public String saveForm() { // session 영역에 접근하기 위한 // 1. session 영역에 sessionUser 키 값에 user 객체가 있는지 체크하기 User sessionUser = (User) session.getAttribute("sessionUser"); // 2. 값이 null이면 로그인 페이지로 리다이렉션 if (sessionUser == null) { return "redirect:/loginForm"; } // 3. null이 아니면 /board/saveForm으로 이동 return "board/saveForm"; } @PostMapping("board/save") //save 주소 만들기 public String save(BoardRequest.SaveDTO requestDTO) { // 정보 담아오기 System.out.println(requestDTO); // 정보 받아왔는지 확인하기 return "redirect:/index"; // 인덱스 페이지로 리다이렉션시키기 } // select b.id, b.title, b.content, b.user_id, u.username from board_tb b inner join user_tb u on b.user_id = u.id where b.id = ? @GetMapping("/board/{id}") public String detail(@PathVariable int id, HttpServletRequest request) { System.out.println("id : " + id); // 바디 데이터가 없으면 유효성 검사 안해도 됨 BoardResponse.DetailDTO responseDTO = boardRepository.findById(id); request.setAttribute("board", responseDTO); return "board/detail"; } }
notion image
notion image
 

5. Board에 있는 board_tb에 제약조건 추가하기

package shop.mtcoding.blog.board; import jakarta.persistence.*; import lombok.Data; import java.time.LocalDateTime; @Table(name="board_tb") @Data @Entity // 테이블 생성하기 위해 필요한 어노테이션 public class Board { // User 1 -> Board N @Id // PK 설정 @GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment 전략 private int id; @Column(length = 30) // 제약 조건 걸기 private String title; private String content; private int userId; // 테이블에 만들어 질때 user_id private LocalDateTime createdAt; }
 

6. 유효성 검사하기

package shop.mtcoding.blog.board; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @Controller public class BoardController { // HttpSession 객체를 참조 private final HttpSession session; private final BoardRepository boardRepository; // DI @GetMapping({"/", "/board"}) public String index(HttpServletRequest request) { User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser == null) { System.out.println("로그인 안된 상태입니다"); } else { System.out.println("로그인 된 상태입니다"); } List<Board> boardList = boardRepository.findAll(); request.setAttribute("boardList", boardList); // ("key", value) return "index"; } @GetMapping("/board/saveForm") public String saveForm() { // session 영역에 접근하기 위한 // 1. session 영역에 sessionUser 키 값에 user 객체가 있는지 체크하기 User sessionUser = (User) session.getAttribute("sessionUser"); // 2. 값이 null이면 로그인 페이지로 리다이렉션 if (sessionUser == null) { return "redirect:/loginForm"; } // 3. null이 아니면 /board/saveForm으로 이동 return "board/saveForm"; } @PostMapping("board/save") //save 주소 만들기 public String save(BoardRequest.SaveDTO requestDTO) { // 정보 담아오기 System.out.println(requestDTO); // 정보 받아왔는지 확인하기 // 유효성 검사하기 if (requestDTO.getTitle().length() > 30) { return "error/400"; // } return "redirect:/index"; // 인덱스 페이지로 리다이렉션시키기 } // select b.id, b.title, b.content, b.user_id, u.username from board_tb b inner join user_tb u on b.user_id = u.id where b.id = ? @GetMapping("/board/{id}") public String detail(@PathVariable int id, HttpServletRequest request) { System.out.println("id : " + id); // 바디 데이터가 없으면 유효성 검사 안해도 됨 BoardResponse.DetailDTO responseDTO = boardRepository.findById(id); request.setAttribute("board", responseDTO); return "board/detail"; } }
notion image
notion image
Share article
RSSPowered by inblog