์ด์ ์๋ฒ ๊ตฌ๋์ ๋ง์ณค์ผ๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด ๋ณด์
๋จผ์ ๋๋ ํ ๋ฆฌ๋ ์ด๋ ๊ฒ ๊ตฌ์ฑ๋์ด ์๋ค. BoardController๋ฅผ ํ๋ ๋ง๋ค์๋ค.
์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์package com.example.day01.controller;
import com.example.day01.dto.BoardDTO;
import com.example.day01.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
@RequiredArgsConstructor
public class BoardController {
private final BoardService boardService;
@GetMapping("/save")
public String save(){
return "save";
}
@PostMapping("/save")
public String save(BoardDTO boardDTO){
System.out.println("boardDTO = " + boardDTO);
return "example";
}
}
BoardController์ด๋ค. ์ด๋ @RequiredArgsConstructor์ ์ ๋ด์ผ ํ๋๋ฐ, ์ด๊ธฐ๊ฐ์ด ์ง์ ๋์ง ์์ final ๋๋ @NonNull์ด ์ง์ ๋ ๋ชจ๋ ํ๋์ ๋ํด ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ์ญํ ์ด๋ค. ์ฆ fianl๋ก BoardService๋ฅผ ์ ์ธํด์ฃผ์๊ธฐ ๋๋ฌธ์ final์ ์๋ ๊ฒ๋ง ๋ค๋ฃฌ๋ค๋ ์๋ฏธ์ด๋ค.
๋ค์์ผ๋ก๋ getmapping์ธ๋ฐ, /save๋ก ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด html saveํ์ผ๋ก ๋งคํํ๋ค๋ ์๋ฏธ์ด๋ค.
postmapping์ ๊ฒฝ์ฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋ฏธํ๋ค. saveํ์ผ์์์ ์ ๋ณด์ ๋ ฅ๊ฐ์ ๊ฐ์ ธ์จ๋ค. ์ฌ์ง์ ์๋ ์ถ๊ฐํ ๊ฒ.
package com.example.day01.dto;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class BoardDTO {
private Long id;//๊ธ ๋ฒํธ
private String boardWriter;//์์ฑ์
private String boardPass;//๊ฒ์๊ธ ๋น๋ฒ
private String boardTitle;//์ ๋ชฉ
private String boardContents;//๋ด์ฉ
private int boardHits;//์กฐํ์
private String createdAt;//์์ฑ์๊ฐ
}
๋ค์์ dto์ด๋ค. lombok์ @getter @setter๋ฅผ ์ด์ฉํ์ฌ ํด๋์ค์ ๋ณ์์ ๊ฐ์ getter๋ก ๊ฐ์ ธ์ค๊ณ setter๋ก ์ ์ฉ๋๊ฒ ํ๋ค.
์ด ํ์ด์ง์์ lombok์ ์ค์นํด์ค๋ค.
๐ค๋ง์ผ lombok์ด ์๋๋ค๋ฉด
java: variable boardService not initialized in the default constructor
์๋ฌ๊ฐ ๋ฐ ํ ๋ฐ, gradle์ ๋ฒ์ ๋ฌธ์ ์ด๋ค.
Gradle 5.x ์ด์์ ๊ฒฝ์ฐdependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' }
์ด๋ ๊ฒ ์์ฑํด์ค์ผ ์ค๋ฅ๊ฐ ๋์ง ์๋๋ค. ์์ฑํ๊ณ gradle์ ๋ค์ buildํด์ฃผ์.
package com.example.day01.service;
import com.example.day01.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
}
์ปจํธ๋กค๋ฌ๋ ์๋น์ค๋ฅผ ์ด์ฉํ๊ณ ์๋น์ค๋ ๋ ํ์งํ ๋ฆฌ๋ฅผ ์ด์ฉํ๋ค.
package com.example.day01.repository;
import org.springframework.stereotype.Repository;
@Repository
public class BoardRepository {
}
์ด๊ฑด ์ผ๋จ ๊ทธ๋๋ก
saveํ์ผ์ ๋ง๋ค์ด ์ฃผ์๋ค.
์ด ํ์ด์ง์์ ๊ธ ์์ฑ์ ๋๋ฅด๋ฉด
save์ฃผ์๋ก ์ด๋ํ๋ฉด์ ํ์ด์ง๋ฅผ ํธ์ถํ๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/save" method="post" enctype="multipart/form-data">
์ ๋ชฉ: <input type="text" name="boardTitle"><br>
์์ฑ์: <input type="text" name="boardWriter"><br>
๋น๋ฐ๋ฒํธ: <input type="text" name="boardPass"><br>
๋ด์ฉ: <textarea name="boardContents" cols="30" rows="10"></textarea>
ํ์ผ: <input type="file" name="boardFile" multiple><br>
<input type="submit" value="์์ฑ"></form>
</body>
</html>
๐ช์ด๋ boardTitle,boardWriter,boardPass,boardContents๋ฑ์ dto์ ์ ์ธํ ์ด๋ฆ๊ณผ ์ผ์นํด์ผ ํ๋ค
์ด๋ ๊ฒ ์์ฑ ํ์ ๋
์ ๋๋ก ์ปจํธ๋กค๋ฌ๋ก ๋์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.