자바 JAVA/스프링프레임워크

스프링 요청 파라미터(request parameter)

땅콩아놀자 2023. 4. 19.

요청 파라미터(request parameter) : 서버에서 전송되는 값

각 상황에 맞게 쿼리 파리미터, 경로 변수, HTTP 본문 데이터를 사용해서 서버에 데이터를 전달할 수 있다.

 

메서드 역할 사용예시
GET 서버에서 리소스를 조회할 때 사용하는 메서드 사용자가 웹 페이지를 요청할 때,
브라우저가 이미지 파일을 요청할 때
POST 서버에서 데이터를 전송할 때 사용하는 메서드 사용자가 회원가입 폼을 제출할 때,
사용자가 게시글을 작성하여 제출할 때
PUT 서버에 데이터를 업데이트할 때 사용하는 메서드 사용자가 프로필 정보를 수정할 때
DELETE 서버에서 데이터를 삭제할 때 사용하는 메서드 사용자가 작성한 게시글을 삭제할 때
PATCH 서버에서 데이터를 일부만 수정할 때 사용하는 메서드 사용자가 게시글의 일부 내용을 수정할 때

예를 들어 아래와 같이 @GetMapping 의 데이터 전송 어노테이션을 쓰고, 그에 맞게 @RequestParam 어노테이션을 연결하여 쿼리 파라미터 값을 추출할 수있다.

@GetMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") int param2) {
    // ...
}

위 코드에서 @RequestParam 어노테이션은 param1과 param2 라는 이름의 쿼리 파라미터 값을 추출한다. 추출된 값은 paran1과 param2 매개변수에 각각 String과 int 타입으로 바인딩된다. 

 

1. 쿼리 스트링(query string) - 쿼리파라미터 

뷰에서 입력값 및 선택한 값이나 파라미터 등에서 미리 뷰에 입력해둔 값이다.

클라이언트 쪽에서 접근할 때 URL 끝애 ?와 함께 파라미터를 전달한다.

예를 들어, http://example.com/test?param1=value1@param2=value2와 와 같이 전달된다.

개발자 쪽에서는 컨트롤러 클래스 메서드에 @RequestParam 어노테이션을 사용해서 해당 파라미터를 받아올 수 있다.

 

쇼핑몰에서 상품 목록을 조회하는 페이지에서는 카테고리별로 상품을 필터링하기 위해 카테고리 ID 등을 쿼리 파라미터로 전달할 수 있다. 또한, 광고 링크에서는 사용자가 광고를 클릭했을 때 해당 광고의 ID 등을 쿼리 파라미터로 전달하여 광고의 성과를 분석 할 수 있다.

 

@RequestParam 쿼리 파라미터나 HTTP 요청 본문 데이터를 매핑하기 위한 어노테이션.
매개변수에 해당하는 이름의 파라미터를 찾아 매핑함. ex) @RequestParam("param1") String param1

 

@GetMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
    // param1과 param2 값을 사용하여 로직을 수행
    return "example";
}

예를 들어 http://localhost:8080.example?param1=value1&param2=value2라는 URL로 GET요청을 보냈다면, "value1"이라는 값이 param1 변수에, "value2"라는 값이 param2 변수에 전달 된다.

 

@GetMapping 어노테이션은 GET 방식으로 요청이 들어왔을때 실행하도록 매핑하는 어노테이션이고, @RequestParam 어노테이션은 Request Parameter로 전달받은 값을 해당 메서드의 매개변수에 맵핑시키는 어노테이션이다. 

 

위의 코드에서는 param1과 param2의 값을 각각 String 타입의 param1, param2 매개변수에 맵핑 시킨다.

 

GET 방식의 /example 로 URL 요청이 들어왔을 때, @RequestParam  어노테이션으로 param1과 param2를 전달 받고, 해당 값을 사용하여 로직을 수행한 후 "example" 문자열을 반환한다.

 

@GetMapping("/example")
public String example(@RequestParam(value = "param1", defaultValue = "default1") String param1, 
                      @RequestParam(value = "param2", defaultValue = "default2") String param2) {
    // param1과 param2 값을 사용하여 로직을 수행
    return "example";
}

defaultValue 속성을 주어서 쿼리 파라미터 값이 전달되지 않을 때 처리할 기본 값을 설정할 수 잇다.

 

 

2. 경로 변수

클라이언트 쪽에서는 URL  일부를 변수화하여 전달한다.

예를 들어 http://example.com/test/{param1}/detail/param2와 와 같이 전달된다.

개발자 쪽에서는 컨트롤러 클래스 안의 메서드에 파라미터에 @PathVariable 어노테이션을 붙여서 해당 변수에 대해 값을 받아올 수 있다. 

 

쇼핑몰에서 상품 상세 페이지를 조회할 때 상품 ID를 경로 변수로 전달할 수 있다.

이 경우 URL에 직접 상품 ID가 포함되기 때문에 보안성이 높아지고, 검색 엔진 최적화(SEO)에도 좋은 효과를 가져올 수 있다.

 

@PathVariable 경로 변수를 매핑하기 위한 어노테이션이다. 매개변수에 해당하는 이름의 변수를 찾아 매핑함
ex) @ PathVariable("param1") String param1

 

URL 경로 http://example.com/users/123 에서 id값을 추출해야 할 경우

@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
    // id 값으로 사용자 정보를 조회하는 로직
    return "user";
}

PathVariable 어노테이션을 파라미터 옆에 붙여서 사용한다. @GetMapping 어노테이션은 해당 URL이 GET 요청일 때 이 메서드가 실행되도록 맵핑해주는 역할이며 {id} 부분이 PathVariable 어노테이션을 통해 id 값을 추출해준다. 따라서 PathVariable 어노테이션은 여러 데이터 전송 관련 어노테이션과 함께 사용해야 하며, 그 역할은 URL 경로에서 값을 추출해주는 것이다

 

 

3. HTTP 요청 - 본문 데이터

HTTP POST, PUT, DELETE 등의 요청에서 전송되는 데이터이다. 클라이언트 쪽에서는 HTTP 요청의 본문 데이터를 전송하게 된다. 주로 JSON, XML, HTML, Form 형태로 전송된다. 코드에서는 컨트롤러 클래스 메서드에 @PostMapper, @

 

쇼핑몰 회원가입 페이지에서는 사용자가 입력한 정보를 HTTP 본문 데이터로 전송하여 회원 정보를 저장할 수 있다.

 

HTTP 요청의 본문 데이터를 전송

@RequestBody HTTP 요청 본문 데이터를 매핑하기 위한 어노테이션이다.
HTTP 요청의 Content-Type에 따라 적절한 변환을 수행한 후 매개변수에 매핑함.
ex) @RequestBody User user

 

HTTP 요청 본문 데이터는 주로 POST, PUT, DELETE 등의 HTTP 요청에서 전송되는 데이터이다.

@PostMapping("/product")
public ResponseEntity<Product> createProduct(@RequestBody ProductRequestDto productRequestDto) {
    Product product = productService.createProduct(productRequestDto);
    return ResponseEntity.ok(product);
}

해당 코드는 HTTP POST 요청을 처리하기 위한 코드이다. 클라이언트는 /product의 URL 경로로 POST요청을 보내면, 서버는 'createProduct' 메서드를 실행하게 된다.

 

@RequestBody는 HTTP 요청 본문에 담긴 데이터를 읽어오는 어노테이션으로, ProductRequestDto 클래스는 클라이언트가 보내는 데이터를 받기 위해 사용되는 클래스이다. 해당 메서드가 실행될 때 클라이언트가 보낸 요청 본문의 데이터를 ProductRequestDto 객체로 변환하고 이를 파라미터로 전달받는다.

 

ProductService 클래스의 createProduct 메서드는 ProductRequestDto 객체를 사용하여 새로운 Product객체를 생성하고 이를 반환한다.

 

마지막으로, 반환 값으로 ResponseEntity의 ok()로 HTTP 상태코드 200과 함께 product객체를 보낸다.

 

@PostMapping("/example")
public String example(@Valid @RequestBody RequestData data) {
    // RequestData 클래스에 저장된 데이터를 사용하여 로직을 수행
    return "example";
}

RequestData data 파라미터 옆에 @Valid 와 @RequestBody를 함께 붙여줄 경우에 요청 본문 데이터의 유효성 검증을 수행할 수 있다.

 

 

4. 요청 파라미터 취득 방법

뷰에서 입력한 값이나 선택 값 혹은 숨김 파라미터로 전송된 값은 아래의 방법으로 취득할 수 있다.

@RequestParam 사용 @RequestParam 어노테이션을
이용해 파라미터를 하나씩 취득 할 수 있다.
Form 클래스 사용
(Form 클래스는 따로 만들어야 함)
스프링 MVC Form 클래스 내의 필드에 대해 값을 저장한다.

요청 파라미터를 모아서 하나의 객체로 받아들이기 때문에 자주 사용되는 방법이다.

받을 떄는 '형변환'이나 '포맷 지정이 가능하다.'

하나의 뷰에 버튼이 여러 개 있을 때 어느 버튼이 클릭되어 요청이 보내졌는지 식별해야 하는 경우에 요청 매핑(Request Mapping) 어노테이션의 Params 속성이다. 링크 등 URL의 일부로 포함된 값을 취득할 떄는 요청 매핑 어노테이션의 value 속성에 값이 저장된 경로를 지정하고 요청 핸들러 메서드의 인수에 @PathVariable 어노테이션과 값을 저장할 인수를 지정한다. 

 

 

반응형

댓글