게시글 쓰기 화면확인
View 확인
@PostMapping("/board/save")
public String save () {
return "redirect:/"
}
Java
복사
DTO 만들기
package shop.mtcoding.blog.board;
import lombok.Data;
public class BoardRequest {
@Data
public static class SaveDTO {
private String title;
private String content;
}
}
Java
복사
save (requestDTO) 테스트 확인
// 테스트 코드
@PostMapping("/board/save")
public String save (BoardRequest.SaveDTO requestDTO) {
System.out.println(requestDTO); // 콘솔에 내용을 출력
return "redirect:/"
}
Java
복사
포스트맨을 사용해서 아래와 같이 정보전송
테스트 확인 완료
유효성 검사
@PostMapping("/board/save")
public String save(BoardRequest.SaveDTO requestDTO){
System.out.println(requestDTO);
//제목 30자 이상 제한
if(requestDTO.getTitle().length() > 30){
return "error/400"; // BadRequest
}
return "redirect:/";
}
Java
복사
유효성 검사 테스트
테스트를 해보기 위해서 일부러 넉넉하게 오타를 내본다
테스트 확인. 정상작동! 의도된 반응을 얻었다.
에러페이지를 동적으로 만들기
@PostMapping("/board/save")
public String save(BoardRequest.SaveDTO requestDTO, HttpServletRequest request){
System.out.println(requestDTO);
if(requestDTO.getTitle().length() > 30){
request.setAttribute("status", 400);
request.setAttribute("msg", "title의 길이가 30자를 초과해서는 안되요");
return "error/40x"; // BadRequest
}
return "redirect:/";
}
Java
복사
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>{{msg}}. {{status}}</h1>
</body>
</html>
HTML
복사
DB에 insert하기
BoardController
@PostMapping("/board/save")
public String save (BoardRequest.SaveDTO requestDTO, HttpServletRequest request) {
//1. 인증 체크
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null){
return "redirect:/loginForm";
}
//2. 바디 데이터 확인 및 유효성 검사
if (requestDTO.getTitle().length() > 30){
request.setAttribute("status", 400);
request.setAttribute("msg", "title의 길이가 30자를 초과해서는 안되요");
return "error/40x"; // 잘못된 요청
}
//3. 모델 위임
//insert into board_tb(title, content, user_id, created_at) values (?, ?, ?, now());
boardRepository.save(requestDTO, sessionUser.getId());
return "redirect:/";
}
Java
복사
BoardRepository
//DB를 변경하는 메소드는 항상 @Transactional을 붙여줘야 된다.
@Transactional
public void save(BoardRequest.SaveDTO requestDTO, int userId) {
Query query = em.createNativeQuery("insert into board_tb(title, content, user_id, created_at) values (?,?,?, now())");
query.setParameter(1, requestDTO.getTitle());
query.setParameter(2, requestDTO.getContent());
query.setParameter(3, userId);
query.executeUpdate();
}
Java
복사
최종 테스트
글쓰기 테스트 확인 완료.