📋 Request Param
요청 파라미터의 값들을 데이터를 매서드의 파라미터로 넘기는 것
즉 URL의 데이터 정보들을 Java 코드의 매서드 인자로 넘겨주는 것을 의미
package hello.springmvc.basic.request;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
@Slf4j
@Controller
public class RequestParamController {
/**
* 쿼리 파라미터 : http://localhost:8080/request-param-v1?username=hello&age=20
* '?' 를 통해 전송하고자 하는 데이터 입력
*/
@RequestMapping("/request-param-v1")
public void requestParamV1(HttpServletRequest request, HttpServletResponse response) throws IOException {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
log.info("username={}, age={}", username, age);
response.getWriter().write("ok");
}
@ResponseBody //Controller이면서 String은 viewResolver이다. 따라서 ResponseBody 어노테이션 사용
@RequestMapping("/request-param-v2")
public String requestParamV2(
/**
* 조회: /requset-param-v2?username=ljh&age30
*/
@RequestParam("username") String memberName, //url에 데이터를 받는 효과
@RequestParam("age") int memberAge){
log.info("memberName={}, memberAge={}", memberName, memberAge);
return "ok";
}
@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV3(
/**
* 변수명과 param의 명칭을 통일하면 v2에 작성한 @RequestParam("변수명") 생략 가능
*/
@RequestParam String username,
@RequestParam int age){
log.info("memberName={}, memberAge={}", username, age);
return "ok";
}
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(String username, int age){
/**
* 파라미터와 param의 명칭이 같으면 v3에서 작성한 @RequestParam 생략가능
*/
log.info("memberName={}, memberAge={}", username, age);
return "ok";
}
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(
@RequestParam(required = true) String username,
@RequestParam(required = false) Integer age){
/**
* required = true : 없으면 오류 / default 값
* required = false : 없어도 괜찮음
*
* int : can`t input null
* Integer = Null ok
*
* null: 알 수 없는 값 != "", 0 이 아니다.
*/
log.info("memberName={}, memberAge={}", username, age);
return "ok";
}
@ResponseBody
@RequestMapping("/request-param-default")
public String requestParamDefault(
@RequestParam(required = true, defaultValue = "guest") String username,
@RequestParam(required = false, defaultValue = "-1") int age){
/**
* default : 값이 들어오지 않았을 때 기본 값
* default가 있으면 required 가 의미가 없다.
* "" 의 빈 문자열인 경우 default가 적용
*/
log.info("memberName={}, memberAge={}", username, age);
return "ok";
}
@ResponseBody
@RequestMapping("/request-param-map")
public String requestParamMap(@RequestParam Map<String, Object> paramMap){
log.info("memberName={}, memberAge={}", paramMap.get("username"), paramMap.get("age"));
return "ok";
}
}