우리가 회원가입, 단어검색, 상품주문 등 여러가지 인터넷상에서 활동을 할때 우리의 데이터를 서버에 전달해줘야하는 경우가 발생한다.이때 어떻게 데이터가 전송이 되며 전송이된 데이터가 어떻게 서버에서 다뤄지는지 알아보자.
클라이언트에서 아래와 같이 Get요청을 보냈다고 가정을 해보자.
// [Request sample]
// GET http://localhost:8080/hello/request/star/Robbie/age/95
@GetMapping("/star/{name}/age/{age}")
@ResponseBody
public String helloRequestPath(@PathVariable String name, @PathVariable int age)
{
return String.format("Hello, @PathVariable.<br> name = %s, age = %d", name, age);
}
URL로 mapping되는 위치 바로 뒤에 정보를 붙여서 보내는 경우가 있다. 이때 Path Varialbe 방식으로
@GetMapping("/star/{name}/age/{age}")
해당 변수로서 받을부분은 중괄호로 받아 @PathVarialbe 어노테이션을 통해 변수로 할당이 가능하다.
// [Request sample]
// GET http://localhost:8080/hello/request/form/param?name=Robbie&age=95
@GetMapping("/form/param")
@ResponseBody
public String helloGetRequestParam(@RequestParam String name, @RequestParam int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
Request Param 방식은 Path Variable 방식과 유사하게 Get형식에서는 URL에 데이터를 담아 전달하지만 그 형태가 다른데 경로마지막에 '/' 가 아닌 ?로 시작하여 중간에 key = value 형식과 구분짓는 '&'로 이뤄져있다는 점이다. 변수는 @RequestParam 어노테이션으로 변수를 할당하는데 이때 value가 null값일때는 오류가 발생한다 이는 기본적으로 RequestParam의 데이터가 필수요소이기 때문인데 이때는 아래와 같이 required옵션을 false로 바꿔주면된다. 또한 String, int, Intger 등 심플한 타입의 변수의 경우 객체타입과 구분지을 필요없이 Spring 자체적으로 변수로 할당되기때문에 @RequestParam의 생략이 가능하다.
@RequestParam(required = false) String name, int age