• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

ModelAttribute 질문있습니다.

21.11.27 22:41 작성 조회수 171

2

View 와 Controller 사이에서 ModelAttribute 로 데이터를 주고 받는 부분에 질문이 있습니다.

VIew 에는 아래와 같이 Input 들어 있는 예제가 있습니다.

<div>
<label for="itemName">상품명</label>
<input type="text" id="itemName" name="itemName" class="form-control"
value="상품A" th:value="${item.itemName}" readonly>
</div>
<div>
<label for="price">가격</label>
<input type="text" id="price" name="price" class="form-control"
value="10000" th:value="${item.price}" readonly>
</div>
<div>
<label for="quantity">수량</label>
<input type="text" id="quantity" name="quantity" class="form-control"
value="10" th:value="${item.quantity}" readonly>
</div>

 

submit 이 트리거가 되면 아래 action 이 수행이 됩니다.

<form action="item.html" th:action="@{/basic/items/add}" method="post">

 

그렇게 되면

Controller 에서 다음과 같이 파라미터를 ModelAttribute 로 받을수 있다고 배웠습니다.

public String addItemV3(@ModelAttribute Item item) {
itemRepository.save(item);
return "basic/item";
}

 

여기서 질문이 있습니다.

사실상 어떤 객체든 필드명만 같다면 꼭 Item 이 아니어도
사용이 가능한걸로 알고 있는데

1. 이것도 메세지 컨버터가 필드 이름만 보고 setter 를 이용해 데이터를 알아서 넣어준다고 생각하면 될까요?

즉 어떤 객체든 상관없이 필드에 

itemName, price, quantity 만 있으면 문제가 없는거죠?

 

답변 1

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2021.11.28

안녕하세요. d1215님, 공식 서포터즈 OMG입니다.

네 맞습니다, 객체 타입과 상관 없이 HTML의 name =""에 해당하는 필드를

파라미터로 @ModelAttribute Item item 혹은 화면단의 name필드를 가진 객체가 있다면 해당 객체에도 프로퍼티 바인딩이 발생합니다.

 

감사합니다.

d1215님의 프로필

d1215

질문자

2021.12.04

감사합니다.