
1. form액션 보러가기
- TYPE이 FORM : DTO가 두 개 필요


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";
}
}


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";
}
}


Share article