Spring MVC 핸들러 메소드 요청 매개변수
Spring Web MVC
백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글
요청 매개변수
요청 매개변수란 요청을 보낼 때 key,value에 해당하는 데이터를 다음과 같이 쿼리 파라미터로 요청할 수 있다.
/events/{id}?name=harry
또는 Form의 key,value로도 전송할 수 있다.
Spring MVC는 둘 다 요청 매개변수로 간주한다.
@RequestParam
요청 매개변수에 들어있는 단순 타입 데이터를 메소드 아규먼트로 받아올 수 있다.
가령 /events/{id}?name=harry
으로 클라이언트가 요청한 쿼리파라미터를 손쉽게 읽어올 수 있다.
String이 아닌 값들은 자동으로 컨버젼을 지원한다.
Map<String,String> 또는 MultiValueMap<String,String>에 사용해서 모든 요청 매개변수를 받아올 수 있다.
사용의 예는 아래와 같다.
@Controller
public class SampleController {
@GetMapping("/events/{id}")
@ResponseBody
public Event getEvent(@RequestParam String name,@MatrixVariable String name) {
Event event = new Event();
event.setName(name);
return event;
}
}
아래와 같이 생략도 가능하다.
@Controller
public class SampleController {
@GetMapping("/events/{id}")
@ResponseBody
public Event getEvent(String name) {
Event event = new Event();
event.setName(name);
return event;
}
}
그러나 헷갈릴 수 있어서 생략하는 것을 권장하지않는다고 한다.
기본적으로 @RequestParam 애노테이션이 존재하는 경우라면 클라이언트는 반드시 쿼리 파라미터를 넣어서 요청을 보내야한다.
그렇지 않은 경우 서버측에서 에러를 내는데, 이를 막기 위해 아래와 같이 requried 옵션을 false로 주고, default Value를 줄 수도 있다.
@Controller
public class SampleController {
@GetMapping("/events/{id}")
@ResponseBody
public Event getEvent(@RequestParam(required = false,defaultValue = "name") String name) {
Event event = new Event();
event.setName(name);
return event;
}
}
Map으로 받고 싶은 경우 아래와 같이 가능하다.
@Controller
public class SampleController {
@GetMapping("/events")
@ResponseBody
public Event getEvent(@RequestParam Map<String,String> params) {
Event event = new Event();
event.setName(params.get("name"));
return event;
}
}
Reference
인프런 백기선님의 스프링 Web MVC