controller에서 값을 받는 방법으로 @PathVariable,
@RequestParam이 있다.
아래 작성된 문서를 해석해보면(feat. 번역기)
메소드 매개변수가 URI 템플릿 변수에 바인딩되어야 한다. RequestMapping 주석 처리기 메서드에 대해 지원됩니다. 메소드 매개변수가 Map<String, String>이면 맵은 모든 경로 변수 이름과 값으로 채워집니다.
내가 만약 이름을 넘겨주고 싶다면 아래와 같이 URI를 작성할 수있을 것이다.
http://localhost:8080/api/get/path-variable/jin
Controller 부분
1. Map 사용
@GetMapping("/path-variable/{name}")
public String pathVariable(@PathVariable Map<String, String> pathMap) {
System.out.println("pathMap isEmpty? : " +pathMap.isEmpty());
StringBuilder sb = new StringBuilder();
pathMap.forEach((key, value) -> {
System.out.println(key + ", " + value);
sb.append(key + ", " + value);
});
return sb.toString();
}
문서에서 본것처럼 Map으로 받아보았다.
콘솔창에 아래와 같이 나왔고, 잘 받아진걸 확인 할 수 있다.
2. 변수 사용
@GetMapping("/path-variable/{name}")
public String pathVariable(@PathVariable(name = "name") String pathName) {
return pathName;
}
변하는 부분 을{변수명} 으로 감싸면 된다.
만약 위의 예에서처럼 변수명이 pathName으로 다를경우
@PathVariable 어노테이션의 name 속성을 @Getmapping 어노테이션에서 지정한 {변수명}과 같은이름을 지정해 주어야한다.
이것역시 문서부분을 먼저 살펴보자
Spring MVC에서 "요청 매개변수"는 쿼리 매개변수, 양식 데이터 및 멀티파트 요청의 파트에 매핑됩니다. 이는 Servlet API가 query Parameter와 form data를 "매개변수"라는 단일 맵으로 결합하고 여기에는 request body의 자동 파싱이 되기 때문입니다.
mvc에 대해서만 해석했다.
여기서도 Map으로 받을수 있다고 되어있다.
그렇다면 query Parameter는 뭘까?
QueryParam
Controller 부분
//Map형태로 받을때 @RequestParam붙이지 않으면 값이 안들어간다.
@GetMapping(path = "/query-param01")
public String queryParam(@RequestParam Map<String, String> queryMap) {
System.out.println("queryMap isEmpty? : " +queryMap.isEmpty());
StringBuilder sb = new StringBuilder();
queryMap.forEach((key, value) -> {
System.out.println(key + ", " + value);
sb.append(key).append(" ,").append(value);
});
return sb.toString();
}
요청 uri : http://localhost:8080/api/get/query-parameter?name=steave&email=aaa@naver.com
결과 :
Controller 부분
//2. 변수로 받기
@GetMapping(path = "/query-param02")
public String queryParam02(
@RequestParam String name,
@RequestParam String email) {
log.info("name={}", name);
log.info("email={}", email);
return "";
}
//3.Dto로 받기
@GetMapping(path = "/query-param03")
public String queryParam03(UserRequest userRequest) {
log.info("name={}", userRequest.getName());
log.info("email={}", userRequest.getEmail());
return "";
}
요청 uri의 query-param01 ->02 -> 03 바꾸면서 결과 값 확인해보자!
❗주의
2.변수로 받을때 query parameter와 controller의 변수명이 다를때 아래와같은 에러발생!
3.Dto로 받을때 Dto에 getter, setter가 있어야한다.
그럼 리스트로는 어떻게 받나? 싶어서 만들어보았다.