HTTP 요청 파라미터 - @RequestParam
스프링이 제공하는 @RequestParam을 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다.
@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV2(
@RequestParam("username") String username,
@RequestParam("age") int age
){
log.info("username = {}, age = {}", username, age);
return "ok";
}
http://localhost:8080/request-param-v2?username=mvc&age=22
@RequestParam 사용 - 파라미터 이름으로 바인딩
@ResponseBody 추가 - View 조회를 무시하고, HTTP message body에 직접 해당 내용 입력
- @RequestParam의 name(value) 속성이 파라미터 이름으로 사용
- @RequestParam("username") String username
- -> request.getParameter("username")
이 때, HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam(name = "xx") 생략 가능
-> 생략 가능하나, 명확하게 욫요청 파라미터에서 데이터를 읽는다는 것을 나타내는 것이 더 좋은 방법
HTTP 요청 파라미터 - @ModelAttribute
실제 개발을 하면 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야한다. 보통 다음과 같이 코드를 작성할 것이다.
@RequestParam String username;
@RequestParam int age;
ExData data = new ExData();
data.setUsername(username);
data.setAge(age);
스프링은 이 과정을 완전히 자동화해주는 @ModelAttribute 기능을 제공한다.
먼저 요청 파라미터를 바인딩 받을 객체를 만들자
@Data
public class ExData {
private String username;
private int age;
}
롬복 @Data가 무엇인지는 아래 게시글로 알 수 있다.
https://wonsjung.tistory.com/388?category=1013361
@ModelAttribute 적용
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute ExData exData) {
log.info("username = {}, age = {}", exData.getUsername(), exData.getAge());
return "ok";
}
마치 마법처럼 ExData 객체가 생성되고, 요청 파라미터의 값도 모두 들어가있다.
스프링 MVC는 @ModelAttribute 가 있으면 다음을 실행한다.
- ExData 객체를 생성한다.
- 요청 파라미터의 이름으로 ExData 객체의 프로퍼티를 찾는다. 그리고 해당 프로퍼티의 setter를 호출해서 파라미터의 값을 입력(바인딩) 한다.
- ex) 파라미터의 이름이 username이면 setUsername() 메서드를 찾아서 호출하면서 값을 입력한다.
프로퍼티 ?
객체에 getUsername(), setUsername() 메서드가 있으면, 이 객체는 username 이라는 프로퍼티를 가지고 있다는 것을 의미.
username 프로퍼티의 값을 변경하면 setUsername()이 호출되고, 조회하면 getUsername()이 호출된다.
참고 : <인프런> 김영한 : 스프링 MVC - 기본 기능
'Spring > MVC' 카테고리의 다른 글
HTTP 요청 메시지 - JSON (0) | 2022.07.07 |
---|---|
HTTP 요청 메시지 - 단순 텍스트 (0) | 2022.07.07 |
HTTP 요청 파라미터 - 쿼리 파라미터, HTML form (0) | 2022.07.07 |
[웹 애플리케이션 이해] - HTML, HTTP API, CSR, SSR (0) | 2022.07.03 |
[웹 애플리케이션 이해] 동시 요청 - 멀티 쓰레드 (0) | 2022.07.03 |