파라미터가 여러개 일 때
파라미터가 여러개일 경우에는 @RequestMapping과 @GetMapping을 사용하여 간단하게 로직을 작성할 수 있다. 아래 예시는 /product 경로를 사용하여 여러 개의 파라미터를 처리한다.
package com.example.project.controller;
import com.example.project.dto.ProductDTO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
//첫번째 파라미터
@RequestMapping("/product")
public class ExampleController {
//두번째 파라미터
@GetMapping("/onion")
public ResponseEntity<ProductDTO> onion(){
return new ResponseEntity<>(new ProductDTO("ask1db", "양파"), HttpStatus.OK);
}
@GetMapping("/desk")
public ResponseEntity<ProductDTO> desk(){
return new ResponseEntity<>(new ProductDTO("1bskd", "책상"), HttpStatus.OK);
}
}
파라미터 전달 하는 방법
@PathVariable
만약에 파라미터를 받아서 값을 추출하여 사용하고 싶을 경우에는 @PathVariable 어노테이션을 사용할 수 있다. 아래 예제는 물품ID값을 파라미터로 받아서 id 값을 설정한다.
package com.example.project.controller;
import com.example.project.dto.ProductDTO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/product") // 첫번째 파라미터
public class ExampleController {
// PathVariable을 사용하는 예시
@GetMapping("/{id}")
public ResponseEntity<ProductDTO> productById(@PathVariable("id") String id) {
// 여기서 id에 따라 다른 상품 정보를 반환할 수 있음
return new ResponseEntity<>(new ProductDTO(id, "상품 이름"), HttpStatus.OK);
}
}
@RequestParam
URL의 쿼리 문자열의 경우 @RequestParam 어노테이션을 사용하여 값을 추출하여 사용할 수 있다. 아래 예제는 파라미터로 물품 ID값을 파라미터로 받아 productID을 설정하고, 쿼리문자열로 상품이름 값을 받아 name으로 설정한다.
package com.example.project.controller;
import com.example.project.dto.ProductDTO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/product") // 첫번째 파라미터
public class ExampleController {
@GetMapping("/{id}")
public ResponseEntity<ProductDTO> productById(@PathVariable("id") String id, @RequestParam("name") String name) {
// 파라미터에 따라 id를 변경하고, 쿼리문자열에 따라 name을 변경한다.
return new ResponseEntity<>(new ProductDTO(id, name), HttpStatus.OK);
}
}
파라미터 정보에 따라 처리하기
만약 특정한 파라미터의 값에 따라서 메서드를 매핑하고 싶다면, @RequestMapping 어노테이션에 params라는 항목을 삽입한다.
- @RequestMapping( value = "값", method = RequestMethod.HTTP메서드, params={"파라미터"})
package com.example.project1.controller;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/tistory")
public class ExampleController {
// id 파라미터가 "codingji"일 때 호출되는 메서드
// @RequestMapping(value="/main", method=RequestMethod.GET, params={"id=codingji"}) 작성 가능
@GetMapping(value="/main", params={"id=codingji"})
public ResponseEntity<String> codingjiEx (){
return new ResponseEntity<>("코딩쥐의 티스토리 메인입니다.", HttpStatus.OK);
}
// id 파라미터가 "readingji", pw 파라미터가 "okreadingji" 일 때 호출되는 메서드
// @RequestMapping(value="/main", method=RequestMethod.GET, params={"id=readingji","pw=okreadingji"}) 작성 가능
@GetMapping(value="/main", params={"id=readingji","pw=okreadingji"})
public ResponseEntity<String> readingjiEx (){
return new ResponseEntity<>("리딩쥐의 티스토리 메인입니다.", HttpStatus.OK);
}
//잘못된 파라미터가 들어온 경우 예외 처리
@GetMapping(value="/main")
public ResponseEntity<String> defaultResponse(){
return new ResponseEntity<>("유효한 파라미터를 작성해주세요.", HttpStatus.BAD_REQUEST);
}
}
헤더 정보에 따라 처리하기
@RequestMapping의 headers 속성을 통해 HTTP 요청의 헤더를 사용하여 클라이언트의 정보를 기반으로 응답을 다르게 처리할 수 있다.
- @RequestMapping( value = "값", method = RequestMethod.HTTP메서드, headers = "헤더")
package com.example.project1.controller;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/tistory")
public class ExampleController {
// 헤더에 CODINGJI-API-VERSION=1 이라는 요청이 있으면 아래 로직 시행
// @RequestMapping(value = "값", method = RequestMethod.OK, headers = "CODINGJI-API-VERSION=1") 가능
@GetMapping(value="/codingji", headers = "CODINGJI-API-VERSION=1")
public ResponseEntity<String> codingjiEx1() {
return new ResponseEntity<>("코딩쥐 버전 1 입니다.", HttpStatus.OK);
}
// @RequestMapping(value = "값", method = RequestMethod.OK, headers = "CODINGJI-API-VERSION=2") 가능
// 헤더에 CODINGJI-API-VERSION=2 이라는 요청이 있으면 아래 로직 시행
@GetMapping(value="/codingji", headers = "CODINGJI-API-VERSION=2")
public ResponseEntity<String> codingjiEx2() {
return new ResponseEntity<>("코딩쥐 버전 2 입니다.", HttpStatus.OK);
}
// 잘못된 요청에 대한 기본 응답 처리
@GetMapping(value="/codingji")
public ResponseEntity<String> defaultResponse() {
return new ResponseEntity<>("유효한 헤더를 제공해주세요.", HttpStatus.BAD_REQUEST);
}
}
해당 로직을 확인하기 위해서 포스트맨을 사용해서 http://localhost:8080/tistory/codingji의 헤더 요청에 CODINGJI-API-VERSION을 추가해서 전송했다.
'Backend > Spring' 카테고리의 다른 글
Spring : HATEOAS에 대해서 (1) | 2024.11.09 |
---|---|
Spring : JSON 데이터 처리에 대해서 (0) | 2024.11.03 |
Spring: HTTP Body 요청 처리하기 (0) | 2024.11.03 |
Spring : @GetMapping에 대해서 (0) | 2024.11.03 |
Spring : Record 클래스 사용하기 (0) | 2024.10.27 |
Spring : Lombok(롬복)에 대해 알아보자 (0) | 2024.10.27 |
Spring : DTO(Data Transfer Object)에 대해서 (0) | 2024.10.27 |
Spring : @Controller 활용하여 다양한 컬렉션 데이터 반환하기 (0) | 2024.10.26 |