@PathVariable을 사용한 GET 메서드 구현
@GetMapping("/{number}")
public ResponseEntity<ProductResponseDto> getProduct(@PathVariable Long number) {
long currentTime = System.currentTimeMillis();
ProductResponseDto productResponseDto = productService.getProduct(number);
return ResponseEntity.status(HttpStatus.OK).body(productResponseDto);
}
@GetMapping("/{number}")은 /product/{number} 경로로 들어오는 GET 요청을 처리합니다. {number} 부분은 @PathVariable Long number에 의해 추출됩니다. 이렇게 하면 /product/123과 같이 요청이 들어올 때, number 변수로 123이 전달되어 해당 상품 번호를 조회하는 기능을 수행할 수 있습니다.
@RequestParam을 사용한 GET메서드 구현
@GetMapping("/search")
public ResponseEntity<List<ProductResponseDto>> searchProducts(@RequestParam String keyword) {
List<ProductResponseDto> products = productService.searchProductsByName(keyword);
return ResponseEntity.status(HttpStatus.OK).body(products);
}
@GetMapping("/search")는 /product/search 경로로 들어오는 GET 요청을 처리합니다. @RequestParam String keyword는 ?keyword=검색어와 같이 URL 쿼리 파라미터로 전달된 keyword를 String 변수로 받아옵니다. 이렇게 하면 /product/search?keyword=검색어과 같이 요청이 들어올 때, keyword 변수로 검색어가 전달되어 해당 키워드를 가지고 상품을 검색하는 기능을 수행할 수 있습니다.
@RequestBody를 활용한 POST메서드 구현
@PostMapping()
public ResponseEntity<ProductResponseDto> createProduct(@RequestBody ProductDto productDto) {
long currentTime = System.currentTimeMillis();
ProductResponseDto productResponseDto = productService.saveProduct(productDto);
return ResponseEntity.status(HttpStatus.OK).body(productResponseDto);
}
@PostMapping()은 /product 경로로 들어오는 POST 요청을 처리합니다. @RequestBody ProductDto productDto는 요청의 body에 있는 데이터를 ProductDto 객체로 자동 매핑합니다. 클라이언트가 JSON 형식으로 데이터를 보낸다면 Spring은 해당 JSON 데이터를 ProductDto 객체로 변환하여 컨트롤러의 createProduct 메서드에 전달합니다.
@RequestBody를 활용한 PUT메서드 구현
@PutMapping()
public ResponseEntity<ProductResponseDto> changeProductName(
@RequestBody ChangeProductNameDto changeProductNameDto) throws Exception {
ProductResponseDto productResponseDto = productService.changeProductName(
changeProductNameDto.getNumber(),
changeProductNameDto.getName());
return ResponseEntity.status(HttpStatus.OK).body(productResponseDto);
}
@PutMapping()은 HTTP PUT 메서드를 처리하는 엔드포인트를 정의합니다. PUT 메서드는 서버에 새로운 데이터를 저장하거나 업데이트하는 데 사용됩니다.
public ResponseEntity'<'ProductResponseDto'>' changeProductName(...) throws Exception 메서드는 ProductResponseDto라는 객체를 ResponseEntity에 담아 반환하는 RESTful API 엔드포인트의 핸들러 함수입니다. 또한 Exception을 던질 수 있습니다.
@RequestBody ChangeProductNameDto changeProductNameDto어노테이션은 요청 본문에 있는 데이터를 ChangeProductNameDto 객체로 변환하여 메서드의 파라미터로 전달합니다. 클라이언트에서 HTTP PUT 요청 본문에 JSON 형식으로 ChangeProductNameDto 객체를 담아 보내는 역할을 합니다.
ProductResponseDto productResponseDto = productService.changeProductName(...): productService라는 서비스 클래스의 changeProductName() 메서드를 호출하여 상품 이름을 변경하고, 변경된 결과를 ProductResponseDto 객체로 받습니다. 이렇게 서비스 클래스를 활용하여 비즈니스 로직을 처리합니다.
return ResponseEntity.status(HttpStatus.OK).body(productResponseDto);: 변경된 결과인 productResponseDto 객체를 ResponseEntity에 담아서 HTTP 상태 코드 200 (OK)과 함께 응답으로 반환합니다. 클라이언트는 이 응답을 받아 상품 이름이 성공적으로 변경되었음을 확인할 수 있습니다.
@PathVariable을 이용한 DELETE 메서드 구현
@DeleteMapping(value ="/{number}")
public ResponseEntity<String> deleteProduct(@PathVariable Long number) throws Exception {
productService.deleteProduct(number);
return ResponseEntity.status(HttpStatus.OK).body("정상적으로 삭제되었습니다.");
}
@DeleteMapping 어노테이션에 정의한 value 이름과 메서드의 매개변수 이름을 동일하게 설정해야 삭제할 값이 주입된다.