GET통신

JYR00·2023년 4월 13일
0

스프링부트 강의

목록 보기
5/10

@RestController(= @Controller + @Responsebody)

  • Spring Framework 4 버전부터 사용가능한 어노테이션
  • @Controller에 @ResponseBody가 결합된 어노테이션
  • 컨트롤러 클래스 하위 메소드에 @ResponseBody 어노테이션을 붙이지 않아도 문자열과 JSON등을 전송할 수 있다.
  • View를 거치지 않고 HTTP ResponseBody에 직접 Return값을 담아 보내게 됨.

client - Request -> Dispatcher Servlet -> Handler Mapping -> Controller -> Message Converter -> HTTP Response - Response-> Client




Dispatcher Servlet이란

  • dispatch : 보내다
  • http 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임을 해주는 프런트 컨트롤러(Front Controller)이다.



Handler Mapping

dispatcherServlet으로 받은 요청을 Controller로 보내지는데, 그런 요청이 어떤 룰으로 컨트롤러에게 보내는지(매핑하는지), 그 방법을 정해주는 클래스가 바로 Handler이다.
HTTP 요청 정보를 이용해서 컨트롤러를 찾아주는 기능을 수행한다. DispatcherServlet이 등록된 HandlerMapping 전략들에게 HttpServletRequest를 전달하면서 매칭되는 오브젝트를 찾는다.



@RequestMapping

  • MVC의 핸들러 매핑(Handler Mapping)을 위해서 DefaultAnnotationHandlerMapping을 사용함.
  • DefaultAnnotationHandlerMapping 매핑정보로 @RequestMapping 어노테이션을 활용
  • 클래스와 메서드의 RequestMapping을 통해 url을 매핑하여 경로를 설정하여 해당 메서드에서 처리.

value : url 설정
method : GET, POST, DELETE, PUT, PATCH 등

  • value와 method로 정의하여 api를 개발하는 방식
    이제는 고전적인 방법으로 사용하지 않는 편.
@RequestMapping(value="/hello", method = RequestMethod.GET)
public String getHello() {
 return "Hello world!";
}



@GetMapping(without Param)

@GetMapping(value="/hello")
public String getHello() {
 return "Hello world!";
}



@PathVariable(변수명 일치 버전)

  • GET 형식의 요청에서 파라미터를 전달하기 위해 URL에 값을 담아 요청하는 방법
  • 아래방식은 @GetMapping에서 사용된 {변수}의 이름과 메소드의 매개변수와 일치시켜야 한다.
@GetMapping(value="/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
 return variable;
}



@PathVariable(변수명 불일치 버전)

  • 아래방식은 @GetMapping에서 사용된 {변수}의 이름과 메소드의 매개변수가 다를 경우 사용하는 방식
  • 변수 관리 용이를 위해 사용되는 방식
@GetMapping(value="/variable2/{variable}")
public String getVariable2(@PathVariable("variable") String var) {
 return var;
}



@RequestParam

  • 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;
   }

@RequestParam(map사용)

  • 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();
}




DTO 사용

  • 별도의 클래스를 만들어 사용
  • GET 형식의 요청에서 쿼리 문자열을 전달하기 위해 사용되는 방법
  • key와 value가 정해져있지만, 받아야할 파라미터가 많은 경우 DTO객체를 사용한 방식

0개의 댓글