[Spring] @PathVariable, @RequestParam

thingzoo·2023년 6월 24일
0

Spring

목록 보기
15/54
post-thumbnail

클라이언트(브라우저)에서 서버로 HTTP 요청을 보낼 때 데이터를 함께 보내는 방법에는 여러가지가 있다. 따라서 서버는 여러 방법에 대한 처리를 할 수 있어야한다. 지금부터 차근차근 알아보쟈!

@PathVariable

Path Variable로 데이터를 받는 방법

Path Variable 방식

// 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 경로에 추가함
    • /star/Robbie/age/95
  • @GetMapping("/star/{name}/age/{age}")
    • URL 경로에서 데이터를 받고자 하는 위치의 경로에 {data} 중괄호를 사용
  • (@PathVariable String name, @PathVariable int age)
    • 해당 요청 메서드 파라미터에 @PathVariable 애너테이션과 함께 {name} 중괄호에 선언한 변수명과 변수타입을 선언하면 해당 경로의 데이터를 받아올 수 있음
  • @PathVariable(name="name")
    • PathVariable명({name})과 파라미터명이 다를때는 name 파라미터에 지정하면됨

@RequestParam

Query String으로 데이터를 받는 방법

Query String 방식

  • 서버에 보내려는 데이터를 URL 경로 마지막에 ?& 를 사용하여 추가함
  • ?name=Robbie&age=95
// 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);
}
  • 데이터를 받기 위해서는 ?name=Robbie&age=95 에서 key 부분에 선언한 name과 age를 사용하여 value에 선언된 Robbie, 95 데이터를 받아옴
  • (@RequestParam String name, @RequestParam int age)
    • 해당 요청 메서드 파라미터에 @RequestParam 애너테이션과 함께 key 부분에 선언한 변수명과 변수타입을 선언하면 데이터를 받아올 수 있음

form 태그 POST 방식

<form method="POST" action="/hello/request/form/model">
  <div>
    이름: <input name="name" type="text">
  </div>
  <div>
    나이: <input name="age" type="text">
  </div>
  <button>전송</button>
</form>
  • HTML의 form 태그를 사용하여 POST 방식으로 HTTP 요청을 보낼 수 있음
  • 이때 해당 데이터는 HTTP Body에 name=Robbie&age=95 형태로 담겨져서 서버로 전달됨
// POST http://localhost:8080/hello/request/form/param
// Header
//  Content type: application/x-www-form-urlencoded
// Body
//  name=Robbie&age=95
@PostMapping("/form/param")
@ResponseBody
public String helloPostRequestParam(@RequestParam String name, @RequestParam int age) {
    return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
  • 해당 데이터를 받는 방법은 앞서 본 @RequestParam 방식과 동일
  • @RequestParam은 생략 가능
  • @RequestParam(required = false)
    • Client에서 전달받은 값들에서 해당 값이 포함되지 않아도 됨
    • @PathVariable(required = false) 도 해당 옵션이 존재
    • Client로 부터 값을 전달 받지 못한 해당 변수는 null로 초기화됨
profile
공부한 내용은 바로바로 기록하자!

0개의 댓글