- 요청 클라이언트의 정보, 제출된 파라미터 등을 저장한 객체
- 클라이언트 요청 시 생성
Spring의 Controller 메서드 작성 시
매개변수에 원하는 객체를 작성하면
존재하는 객체를 바인딩 또는 없으면 생성해서 바인딩-> ArgumentResolver (전달 인자 해결사)
@PostMapping("test1") // /param/test1 POST 방식 요청 매핑 public String paramTest1(HttpServletRequest req) { String inputName = req.getParameter("inputName"); String inputAddress = req.getParameter("inputAddress"); int inputAge = Integer.parseInt(req.getParameter("inputAge")); log.debug("inputName : " + inputName); log.debug("inputAddress : " + inputAddress); log.debug("inputAge : " + inputAge); return "redirect:/param/main"; // 파일 경로가 아니라 주소임!# HTML <h1>서버로 파라미터 제출하기</h1> <h3>1. HttpServletRequest.getParameter("key") 이용</h3> <form action="/param/test1" method="post"> 이름 : <input type="text" name="inputName"> <br> 나이 : <input type="number" name="inputAge"> <br> 주소 : <input type="text" name="inputAddress"> <br> <button>제출하기</button> </form>
Spring에서 Redirect(재요청) 하는 방법!
- Controller 메서드 반환값에
"redirect:요청주소"; 작성
- request 객체를 이용한 파라미터 전달 어노테이션
- 매개변수 앞에 해당 어노테이션을 작성하면, 매개변수에 값이 주입됨.
- 주입되는 데이터는 매개변수의 타입에 맞게 형변환이 자동으로 수행됨.
[기본 작성법]
@RequestParam("key") 자료형 매개변수명[속성 추가 작성법]
@RequestParam(value="key", required=false, defaultValue="1")value : 전달받은 input 태그의 name 속성값(파라미터 key)
required : 입력된 name 속성값 파라미터 필수 여부 지정(기본값 true)
-> required=true인 파라미터가 존재하지 않는다면 400(Bad Request) 에러 발생
-> ""(빈문자열)일 때는 에러 발생 X
(파라미터가 존재하지 않는 것이 아니라 name속성값="" 로 넘어오기 때문에)defaultValue : 파라미터 중 일치하는 name 속성값이 없을 경우에 대입할 값 지정.
-> required=false 인 경우 사용
@PostMapping("test2") // /param/test2 POST 방식 요청 매핑하는 메서드다! public String paramTest2(@RequestParam("title") String title, @RequestParam("writer") String writer, @RequestParam("price") int price, // 형변환이 필요한 경우에는 파라미터 value값 필수 작성되어있어야 함. @RequestParam(value="publisher", required = false, defaultValue = "kh출판사") String publisher) { log.debug("title : " + title); log.debug("writer : " + writer); log.debug("price : " + price); log.debug("publisher : " + publisher); return "redirect:/param/main"; }# HTML <h3>2. @RequestParam 어노테이션 이용 - 낱개 파라미터 컨트롤러에서 얻어오는 방 </h3> <form action="/param/test2" method="POST"> 책 제목 : <input type="text" name="title"> <br> 작성자 : <input type="text" name="writer"> <br> 가격 : <input type="number" name="price"> <br> 출판사 : <input type="text" name="publisher"> <br> <button>제출하기</button> </form>
- 같은 name 속성값을 가진 파라미터 얻어오기 (String[], List< String >)
- 제출된 파라미터 한 번에 묶어서 얻어오기 ( Map < String, Object> )
@PostMapping("test3") public String paramTest3(@RequestParam("color") String[] colorArr, @RequestParam("fruit") List<String> fruitList, @RequestParam Map<String, Object> paramMap) { log.debug("colorArr : " + Arrays.toString(colorArr)); log.debug("fruitList : " + fruitList); // @RequestParam Map<String, Object> paramMap // -> 제출된 모든 파라미터가 Map에 저장된다. // -> 같은 name 속성을 가진 파라미터는 String[], List로 저장 X // 첫번째로 제출된 value 값이 저장됨. log.debug("paramMap : " + paramMap); // {color=Red, fruit=Apple, productName=아름다운조명, expirationDate=2025-04-24} return "redirect:/param/main"; }# HTML <h3>3. @RequestParam 어노테이션 이용 - 여러개 파라미터를 컨트롤에서 얻어오는 방법> </h3> <form action="/param/test3" method="post"> 색상 : Red <input type="checkbox" name="color" value="Red"> Green <input type="checkbox" name="color" value="Green"> Blue <input type="checkbox" name="color" value="Blue"> <br><br> 과일 : Apple <input type="checkbox" name="fruit" value="Apple"> Banana <input type="checkbox" name="fruit" value="Banana"> Orange <input type="checkbox" name="fruit" value="Orange"> <br><br> 상품명 : <input type="text" name="productName"> <br> 유통기한 : <input type="date" name="expirationDate"> <br> <button>제출하기</button> </form>
// @ModelAttribute // - DTO (또는 VO)와 같이 사용하는 어노테이션 // 전달받은 파라미터의 name 속성값이 // 함께 사용되는 DTO의 필드명과 같다면 // 자동으로 setter를 호출해서 필드에 값을 저장 // ** 주의사항 ** // - DTO에 기본 생성자 필수로 존재해야 한다! // - DTO에 setter가 필수로 존재해야 한다! // @ModelAttribute 를 이용해 값이 필드에 세팅된 객체를 // "커맨드 객체"라고 부른다. // @ModelAttribute 생략 가능!! @PostMapping("test4") public String paramTest4(/*@ModelAttribute*/ MemberDTO inputMember) { log.debug("inputMember : " + inputMember); return "redirect:main"; // 상대경로 작성법 // (현재 위치가 중요! // -> 현재 경로의 가장 마지막 부분을 redirect:이주소 로 변경하기 때문에) // "redirect:/param/main"; }# HTML <h3>4. @ModelAttribute를 이용한 파라미터 얻어오기</h3> <form action="/param/test4" method="post"> ID : <input type="text" name="memberId"> <br> PW : <input type="password" name="memberPw"> <br> NAME : <input type="text" name="memberName"> <br> AGE : <input type="number" name="memberAge"> <br> <button>제출하기</button> </form>