본문 바로가기

study/Spring boot

컨트롤러가 get 요청을 받을 때

HTTP 통신에서는 사용자에게 요청을 받는 주소가 있어야 하는데 주소마다 받는 메소드들을 모아 놓은 것이 컨트롤러다.

 

컨트롤러에서 get 요청을 받는 메소드를 만들려면 선언부 위에

* @ReqeustMapping을 사용해서 method를 get으로 설정한다

* @GetMapping을 붙인다.

@RequestMapping(method = RequestMethod.GET, path = "/get")
// 또는
@GetMapping("/get")

 

get 요청에 경우 쿼리스트링을 통해 데이터를 보낸다. 메소드의 매개 변수 부분에 @RequestParam 어노테이션을 붙인 지역변수를 설정하면 같은 이름의 값과 매핑해서 처리해준다.

 

?name=shin&password=123 이라는 쿼리스트링을 보냈다고 가정하자

public String getParam(@RequestParam String name, @RequestParam int password){
	System.out.println(name);
    System.out.println(password);
}

콘솔 창에는 "shin", "123"이 출력된다.

 

위 코드에서 만약 "password"라는 이름을 메소드 내 지역 변수를 사용하려면 어떻게 해야할까? 우선 매개변수의 이름을 바꿔야 한다. 매개변수 password를 pwd를 바꾼다고 하자. 그러면 바뀐 이름으로 쿼리스트링을 보내야 한다. 하지만 이름 설정을 통해 쿼리스트링 시 password로 보낼 수 있다.

public String getParam(@RequestParam String name, @RequestParam(name="password") int pwd){
    int password = 1111;
    System.out.println(id);
    System.out.println(pwd);
}

콘솔에는 그대로 "shin"과 "123"이 출력될 것이다.

 

쿼리스트링으로 받는 파라미터가 많은 경우에는 아예 객체에 담아서 받을 수 있다.

메소드의 매개변수로는 쿼리스트링으로 들어오는 데이터를 담을 객체를 갖는다. 그러면 객체의 필드와 매핑되어 메소드는 객체를 통해 요청시 들어온 데이터를 이용할 수 있다.

관련글: 2021.03.22 - [study/Spring boot] - 엉터리 정리 - 스프링이 요청을 받는 방식, Maven, Lombok

 

스프링 부트는 기본적으로 잭슨 라이브러리를 내장하고 있다. 따라서 컨트롤러의 메소드가 객체를 return 하게 되면 json 형태로 변환하여 return 한다.

 

Get 요청은 주소 창에 파라미터가 노출되는 특징이 있다.

 

브라우저에서 주소에 대한 캐시가 이루어지 지므로, 정보를 얻을 때 사용한다. (?)

 

-> 추가 내용

RequestParam 괄호 안에 defaultValue 를 설정해서, 값이 없거나, 잘못된 값이 들어올 때, 기본값으로 전달할 수 있다.

@RequestParam(defalutValue = 20) int age