일단 상품을 추가하려면 상품을 입력받은 페이지가 필요하다
대충 html 파일 하나 만들고
form 안에 인풋태그 두개(상품명, 가격)와 전송할 submit 버튼을 만들어준다
<form action="/add" method="POST">
<input name="title">
<input name="price">
<button type="submit"></button>
</form>
action 은 어디로 보낼지
method POST 같은 경우는 서버로 데이터를 전송할 때 사용된다
@GetMapping("/write")
String write() {
return "write.html";
}
또 컨트롤러로 상품을 추가하려는 페이지를 만들어준다
이제 form 태그안에 action으로 add로 보내기로 했으니
컨트롤러로 add 주소로 올 경우에 대해서 짜줘야한다
포스트 방식으로 바꿨으니 포스트 매핑으로 add 로 들어오는 것에 대하여
@RequestParam 으로 name 속성에 적어놓은 것들을 보낸다
Entity를 새로 생성해주고
그 안에다가 private으로 설정되있으니
setter를 통해 이름과 가격을 다시 설정해준다
그 후 repository에 내장되있는 save 함수를 통해
만들어놓은 Entity 객체를 통해 db에 저장해주고
redirect: 로 다시 주소로 보내준다
하지만 받아오는 변수가 여러개라면 ?
일일히 적는것도 일이다
그럴땐 Map 타입으로 변수들을 받아오면 된다
@PostMapping("/add")
String addPost(@RequestParam Map formData) {
var item = new Item();
item.setTitle((String)formData.get("title"));
item.setPrice((Integer)formData.get("price"));
itemRepository.save(item);
return "redirect:/list";
}
타입은 Map으로 해주고 작명은 알아서 하면 된다
map.put("key", "value");
식으로 넣을 수 있고
map.get("key");
식으로 value 값을 꺼내올 수 있다
꺼내오는 값은 object 값으로
setTitle 에서 원하는 매겨변수는 String 값이기 때문에
타입캐스팅도 해준다
또또 더 간편하게 넣는 법이 있다
@PostMapping("/add")
String addPost(@ModelAttribute Item item) {
itemRepository.save(item);
return "redirect:/list";
}
@ModelAttribute 로 Item클래스 새로 생성하고
알아서 맞는곳에 다 집어넣어준다
위에 했던것들을 간편하게 줄여준다
'SpringBoot' 카테고리의 다른 글
상품 상세 페이지 (1) | 2024.10.16 |
---|---|
navbar 만들기 (th:fragment, th:replace) (1) | 2024.10.16 |
접근 권한 (access modifiers (0) | 2024.10.15 |
HTML에 서버데이터 넣기 (0) | 2024.10.14 |
lombok + DB 데이터 출력 (0) | 2024.10.14 |