[Spring] HTTP 요청 파라미터 - @RequestParam,@ModelAttribute
HTTP 요청 데이터 조회
@Slf4j
@Controller
public class RequestParamController {
@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("usename={}, age={}",username,age);
response.getWriter().write("ok");
}
@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV2(@RequestParam("username") String memberName, @RequestParam("age") int memberAge){
log.info("usename={}, age={}",memberName,memberAge);
return "ok";
}
}
@ResponseBody를 사용함으로서 뷰 조회가 아닌 "ok" 라는 문자를 HTTP 응답 메시지에 담아 반환한다.
👩💻 @RequestParam
단일 파라미터를 전달 받을 때 사용하는 어노테이션
파라미터 필수 여부 - requestParamRequired
@ResponseBody @RequestMapping("/request-param-required") public String requestParamRequired(@RequestParam(required = true) String username, @RequestParam(required = false) int age){ log.info("usename={}, age={}",username,age); return "ok"; }
- 파라미터 필수 여부
- 기본값은 true이다.
- required = true 일 경우 무조건 값이 있어야한다.
- required = false는 생략가능하다.
💦주의! - 기본형(primitive)에 null 입력
@RequestParam(required = false) int age)
로 age는 필수 여부가 false이지만 생략하게 되면 500 예외가 발생한다.
이러한 경우는 null을 int에 입력하는 것이 불가능하기 때문에
👉 null을 받을 수 있는 Integer로 변경하거나,
👉 defaultValue를 사용해야한다.
💦주의! - 파라미터 이름만 있고 값이 없는 경우
username만 있고 값이 없는 경우는 null이 아닌""(빈문자)
로 들어 온다!
👩💻 defaultValue
@ResponseBody @RequestMapping("/request-param-default") public String requestParamDefault(@RequestParam(required = true, defaultValue = "guest") String username, @RequestParam(required = false, defaultValue = "-1") int age){ log.info("usename={}, age={}",username,age); return "ok"; }
- 파라미터에 값이 없는 경우
defaultValue
를 사용하면 기본값을 적용할 수 있다.- defaultValue는
빈 문자
의 경우에도 적용된다.
📌실습해보기
👩💻 requestParamMap
@ResponseBody
@RequestMapping("/request-param-map")
public String requestParamMap(@RequestParam Map<String,Object> paramMap){
log.info("usename={}, age={}",paramMap.get("username"),paramMap.get("age"));
return "ok";
}
requestParamMap
을 사용하여 파라미터를 Map으로 조회할 수 있다.
📌실습해보기
👩💻 @ModelAttribute
- HTTP Request에 포함된 파라미터를 지정한 클래스의 객체로 바인딩한다.
- @ModelAttribute의 name으로 정의한 객체를 View 페이지에서 사용할 수 있다.
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData){
log.info("usename={}, age={}",helloData.getUsername(),helloData.getAge());
return "ok";
}
- HelloData 객체를 생성한다.
- 요청 파라미터 이름으로
HelloData
객체의 프로퍼티를 찾는다. 그리고 해당 프로퍼티의 setter을 호출해서 값을 입력(바인딩)한다.
- ex) 파라미터이름이 username일 경우 setUsername() 메서드를 찾아서 호출하면서 값을 입력한다.
@ModelAttibute는 생략 가능하다.
그런데 @RequestParam도 생략 가능하기 때문에 혼란이 발생한다.
🔑 스프링은 해당 생략시 다음과 같은 규칙을 적용한다!
String
,int
,Integer
같은 단순 타입 ➡@RequestParam
- 나머지 =
@ModelAttribute
Author And Source
이 문제에 관하여([Spring] HTTP 요청 파라미터 - @RequestParam,@ModelAttribute), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@silverbi99/Spring-HTTP-요청-파라미터-RequestParamModelAttribute저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)