client - Request
-> Dispatcher Servlet -> Handler Mapping -> Controller -> Message Converter -> HTTP Response - Response
-> Client
dispatcherServlet으로 받은 요청을 Controller로 보내지는데, 그런 요청이 어떤 룰으로 컨트롤러에게 보내는지(매핑하는지), 그 방법을 정해주는 클래스가 바로 Handler이다.
HTTP 요청 정보를 이용해서 컨트롤러를 찾아주는 기능을 수행한다. DispatcherServlet이 등록된 HandlerMapping 전략들에게 HttpServletRequest를 전달하면서 매칭되는 오브젝트를 찾는다.
value : url 설정
method : GET, POST, DELETE, PUT, PATCH 등
@RequestMapping(value="/hello", method = RequestMethod.GET)
public String getHello() {
return "Hello world!";
}
@GetMapping(value="/hello")
public String getHello() {
return "Hello world!";
}
@GetMapping(value="/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
return variable;
}
@GetMapping(value="/variable2/{variable}")
public String getVariable2(@PathVariable("variable") String var) {
return var;
}
GET 형식의 요청에서 쿼리 문자열을 전달하기 위해 사용되는 방법
'?'를 기준으로 우측에 {키} = {값}의 형태로 전달되며, 복수 형태로 전달할 경우 &를 사용한다.
http://localhost:8080/api/v1/get-api/request1?name=flature&email=thinkground.flature@gmail.com&organization=thinkground
@GetMapping(value="/request1")
public String getRequestParam1(
@RequestParam String name,
@RequestParam String email,
@RequestParam String organization) {
return name + "" + email + "" + organization;
}
GET형식의 요청에서 쿼리 문자열을 전달하기 위해 사용되는 방법
어떤 요청 값이 들어올지 모를 경우 사용하는 방식
@GetMapping(value="/request2")
public String getRequestParam2(@RequestParam Map<String, String> param){
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map -> {
sb.append(map.getKey() + ":" + map.getValue() + "\n");
});
return sb.toString();
}