Springboot

[Springboot] PathVariable vs RequestParam

KJihun 2023. 6. 23. 23:02
728x90

오늘부터 본격적인 주특기인 SpringBoot가 시작됐다.

이해해야 할게 많아서 5시간짜리 강의를 12시간 동안 들었는데 전부 듣지 못하였다.

특히 PathVariable과 RequestParam이 헷갈려서 정리를 했다.

 

 

PathVariable: URL 경로의 일부를 변수로 사용하는 데에 사용되며 RESTful 한 웹 서비스에서 자주 사용된다.

    //@PathVariable
    public String helloRequestPath(@PathVariable String name, @PathVariable int age)
    {
        return String.format("Hello, @PathVariable.<br> name = %s, age = %d", name, age);
    }

 

 

RequestParam: URL의 쿼리 매개변수를 사용하는 데에 사용된다.

쿼리 매개변수란 URL 뒤에 "?"를 사용하여 전달되는 키-값 쌍이다.

예를 들어 "/users?id=1"과 같은 URL이 있다면, id가 키, 1이 키 값인 쿼리 매개변수이며

&를 사용하여 여러 값을 보낼 수 있다. "/users?id=1&key=value"

// GET 방식 : 입력된 데이터가 URL의 쿼리 문자열로 URL에 포함된다. 
// GET 방식은 주로 데이터를 검색하거나 조회할 때 사용된다

    @GetMapping("/form/param")
    @ResponseBody
    // (required = false) : 변수를 포함시키지 않아도 오류가 발생하지 않게 한다.
	// 포함시키지 않은 변수에는 null값이 들어간다.
    public String helloGetRequestParam(@RequestParam String name, @RequestParam(required = false) int age) {
        return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
    }


// POST 방식 : <form> 요소의 method 속성이 "post"로 설정된 경우에 사용.
// 입력된 데이터가 요청의 본문(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);
    }
}

 

오늘 알게된점은

PathVariable은 하나의 데이터에 대한 정보를 받아올때 적절하며

RequestParam 여러개의 값을 url에 전달할 때 사용한다.

TIL에는 작성하지 못했지만 런타임 시점에 바이트를 조작하여 클래스로 변환할 때에 코드를 넣어주는 lombok,

데이터 모델(Model), 사용자 인터페이스(View), 비즈니스 로직(Controller)으로 구분하여 코드 재사용, 유지 보수성, 개발자 간 협업을 용이하게 도와주는 MVC, 

Jackson 라이브러리로 java 객체를 JSON 형태로 반환 or json 객체를 java 객체로 반환하는 ObjectMapper, 

PathVariable과 RequestParam의 차이 등 여러가지를 알 수 있었다.

 

 

 

 

'Springboot' 카테고리의 다른 글

[Springboot] Security  (0) 2023.07.01
[Springboot] Filter와 Spring Security  (0) 2023.06.30
[Springboot] login 구현  (0) 2023.06.29
[Springboot] @Valid  (0) 2023.06.28
Springboot  (0) 2023.06.23