Free Lines Arrow
본문 바로가기
Spring/spring mvc 1 스터디

[Spring] @ModelAttribute 사용하기

by skahn1215 2021. 11. 27.
728x90
반응형

@ModelAttribute

  • 사용하여 View 와 Controller 에 어떻게 적용하는지 알아보자
  • ModelAttribute 는 Model 을 지원하는 애노테이션이다.
  • Controller 와 View 가 어떻게 Item 객체를 주고받는지 살펴본다.

 

Item 객체

package hello.itemservice.domain.item;
import lombok.Data;
@Data
public class Item {
    private Long Id;
    private String itemName;
    private Integer price;
    private Integer quantity;

    public Item() {
    }

    public Item(String itemName, Integer price, Integer quantity) {
        this.itemName = itemName;
        this.price = price;
        this.quantity = quantity;
    }
}

 

View 의 일부분

  • th:action="@{/basic/items/add}":
    - sumbit 이 발생하면 해당 컨트롤러를 호출해준다.
  • input 의 이름들은 각각 itemName, price, quantity 로 Item 객체의 필드 네임과 일치한다.
    <form action="item.html" th:action="@{/basic/items/add}" method="post">
        <div>
            <label for="itemName">상품명</label>
            <input type="text" id="itemName" name="itemName" class="form-control" placeholder="이름을 입력하세요">
        </div>
        <div>
            <label for="price">가격</label>
            <input type="text" id="price" name="price" class="form-control"
                   placeholder="가격을 입력하세요">
        </div>
        <div>
            <label for="quantity">수량</label>
            <input type="text" id="quantity" name="quantity" class="form-control" placeholder="수량을 입력하세요">
        </div>
        <hr class="my-4">
        <div class="row">
            <div class="col">
                <button class="w-100 btn btn-primary btn-lg" type="submit">상품 등록</button>
            </div>
        </div>
    </form>

 

@RequestParam 과 @ModelAttribute

Request 에서 ModelAttribute 로 적용해보는 과정을 정리해본다.

 

 

@RequestParam 으로 요청 파라미터 가져오기

  • form 에 input으로 정의된 데이터들을 가져온다
    @PostMapping("/add")
    public String addItemV1(@RequestParam String itemName ,
                       @RequestParam int price,
                       @RequestParam int quantity,
                       Model model) {

        Item item = new Item();
        item.setItemName(itemName);
        item.setPrice(price);
        item.setQuantity(quantity);

        itemRepository.save(item);
        model.addAttribute("item", item);

        return "basic/item";
    }

 

 @ModelAttribute 적용1

  • 각각 RequestParam 으로 받았던 데이터를 객체로 받을수 있다.
  • 객체의 필드이름과 form 의 input 타입의 이름만 같으면 된다.
    @PostMapping("/add")
    public String addItemV2(@ModelAttribute("item") Item item) {
        itemRepository.save(item);
        return "basic/item";
    }

 

 @ModelAttribute 적용2

  • ModelAttribute 의 name을 생략할수있다.
    @PostMapping("/add")
    public String addItemV3(@ModelAttribute Item item) {
        itemRepository.save(item);
        return "basic/item";
    }

 

 @ModelAttribute 적용3

  • 아예 ModelAttribute  자체도 생략이 가능하다.
   @PostMapping("/add")
    // 아예 생략도 가능하다.
    public String addItemV4(Item item) {
        itemRepository.save(item);
        return "basic/item";
    }
728x90
반응형

'Spring > spring mvc 1 스터디' 카테고리의 다른 글

[Spring] PRG(Post Redirect Get)  (0) 2021.12.03
[Spring] 웹페이지 만들어 보기  (0) 2021.12.02
[Spring] Message Converter  (0) 2021.11.25
[Spring] HTTP 응답  (0) 2021.11.21
[Spring] HTTP 요청메세지 TEXT, JSON  (0) 2021.11.16

댓글