인프런 커뮤니티 질문&답변

taeu kim님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문 목록 검색, 취소

orderForm Post

작성

·

272

1

질문

1.orderForm을 Post로 보냈는데 왜 content type이 text/html 인가요?? application/x-www-form-urlencoded 아닌가요? 그리고 Form 데이터는 어디있나요 보이지 않습니다.

2.@RequestParam은 form형식의 데이터나 url형식으로 받아야하는데 어떻게 "memberId"처럼 필드값을 바로 받을 수 있나요?? 구글링을 해봐도 잘 안나옵니다. 혹시 키워드 가르쳐주시면 직접 찾아보겠습니다.

Controller

@PostMapping("/order")
public String order(@RequestParam("memberId") Long memberId,
                    @RequestParam("itemId") Long itemId,
                    @RequestParam("count") int count){

    orderService.order(memberId, itemId, count);
    return "redirect:/orders";
}

답변 2

1

David님의 프로필 이미지

2022. 09. 02. 17:08

안녕하세요. taeu kim님, 공식 서포터즈 David입니다.

  1. Response Header가 아닌 Request Header를 봐주세요.

  2. 스프링 MVC 1편 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/unit/71220 을 참고해주세요.

감사합니다.

taeu kim님의 프로필 이미지
taeu kim
질문자

2022. 09. 02. 17:16

답변 감사합니다. 2번의 경우 강의가 없다고 가정하고 스스로 해결해보고 싶었습니다. 이러한 경우 구글링은 어떤 키워드로 해야하는지요?.

정말 많은 키워드로 삽질을 했지만 원하는 결과를 얻을 수 없었습니다.

추가적으로 링크를 통해 동영상을 보았지만 제 질문과는 다른 내용이었습니다. 직접 option의 값인 member.id가 아닌 select의 이름 memberId를 매개로 어떻게 Long memberId를 가져올 수 있는지 궁금합니다.

David님의 프로필 이미지

2022. 09. 02. 17:32

'어떻게 "memberId"처럼 필드값을 바로 받을 수 있나요??'

이 말씀이 어떤 것을 말씀하시는지 코드나 더 자세히 말씀해주실 수 있으실까요?

taeu kim님의 프로필 이미지
taeu kim
질문자

2022. 09. 02. 17:33

직접 option의 값인 member.id가 아닌 상위의 select의 이름 memberId를 매개로 어떻게 Long memberId를 가져올 수 있는지 궁금합니다.

기존에 RequestParam을 사용할 때

예를 들어

class A{

String name;

} 의 필드값을 받을 때

@RequestParam("name", name) 이런식으로 필드를 직접 참조해 값을 받아왔습니다.

하지만 위의 select 예제에서는

select option의 value인 member.id를 직접 참조하는 것이 아니라 select의 이름 memberId를 참조해

필드값을 받아오기때문에 이해가 되지 않습니다.

===추가===
<select name="memberId" id="member" class="form-control">

<option value="">회원선택</option>

<option th:each="member : ${members}"

th:value="${member.id}"

th:text="${member.name}" />

</select>

코드가 위처럼 되어있을 때 value의 member.id값을 가져오기위해서

@RequestParam("memberId" Long memberId) 가 맞나요

@RequestParam("member.id" Long memberId)가 맞나요?

David님의 프로필 이미지

2022. 09. 03. 08:51

질문 핵심은 폼(질문 내용에서는 select에서 선택된 값)에서 제출한 데이터를 RequestParam으로 어떻게 받느냐를 물으시는 것 같은데 맞을까요?

아니라면 다시 말씀해주세요.

 

먼저, 아래 강의를 봐주세요.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/unit/71219

 

  1. 폼에서 제출할 때 요청과 함께 폼에서 제출한 데이터가 어떻게 가는지 아셔야 합니다.

    1. urlencoded 방식과 post로 제출된다면 데이터는 다음과 같이 제출됩니다.

      1. memberId="선택된 항목의 값"&memberName="david"

  2. @RequestParam("memberId")는 1-i-a에서 memberId에 해당하는 값을 가져오게 됩니다.

 

즉, 폼에서 제출한 데이터를 RequestParam으로 받으려면 input 태그의 name 속성을 RequestParam의 name 속성의 값으로 입력해야 합니다.

<select name="memberId"> => RequestParam("memberId")

 

0

taeu kim님의 프로필 이미지
taeu kim
질문자

2022. 09. 03. 12:47

제 질문을 이해하신것같습니다. 답변이 되었습니다. 하지만 위의 링크 강의에는 관련 내용(Form 데이터가 넘겨지는 방식)이 나오지 않습니다. 2번 복습하고 동영상 보라고하셔서 오늘까지 총 3번이나 봤는걸요 ㅠㅠㅠ

select 태그에서는 key가 name이고 value가 memberId니까 @RequestParam("memberId")는 됩니다. 하지만 위의 예제에선 @RequestParam("memberName")으로 값을 가져올 수 없습니다. 이건 이유가 뭔가요? 답변자님께서 설명해주신걸로는 해결이 안됩니다.

 

== 결론 ==

form post로 보낼 때

name : value &name2: value2 이런식으로 보내지는 데 위 코드의 예제에선 아래와 같이 보내지네요.

image

따라서 memberName을 바로 가져올 순 없고 memberId를 키로 1이라는 value를 받아, member.getName()으로 찾아오면 되는 것같습니다.

상세한 답변 감사드립니다.

David님의 프로필 이미지

2022. 09. 03. 13:02

memberName은 예시였습니다. 오히려 이해하시는데 방해를 했네요.

FormData 오른쪽에 view souce를 선택하시면 memberId=1&itemId=2&count=1 이 나올겁니다.

 

위에 언급한 강의 내 @RequestParam과 Form Post 전송 둘 모두를 들으시면 더 잘 이해하실 수 있을 것 같습니다.

@RequestParam은 url 뒤에 오는 쿼리스트링과 body 내 데이터(여기서는 key=value 형태)를 모두 처리할 수 있습니다.

taeu kim님의 프로필 이미지

작성한 질문수

질문하기