서버 컴퓨터에 파일저장하는 간단 RestAPI 서버 만들기 5

송민경's avatar
Aug 08, 2024
서버 컴퓨터에 파일저장하는 간단 RestAPI 서버 만들기 5

1. ItemController 만들기

  • Spring Boot 애플리케이션에서 RESTful API를 구현하는 컨트롤러 클래스
  • Item 엔티티에 대한 CRUD (Create, Read, Update, Delete) 작업을 수행
  • XML 파일을 사용하여 JSON 데이터를 저장하고 로드하는 기능이 포함
 

클래스 및 필드

  • @RestController : REST API의 컨트롤러임을 명시
JSON 또는 XML로 응답을 반환
  • @RequestMapping("/items") : /items 경로로 들어오는 요청을 이 컨트롤러가 처리
  • @CrossOrigin : CORS 설정을 통해 특정 도메인 요청을 허용
  • @Autowired : Spring의 의존성 주입을 통해 주입
 

Get 요청 처리 - getAllItems

  • @GetMapping: /items 경로로 들어오는 GET 요청을 처리
  • 모든 아이템을 조회하여 반환
    • XML 파일에서 데이터를 가져올 수 있는 경우, 파일에서 아이템을 조회하고 JSON으로 변환하여 반환
    • 크기가 커질수록 JSON 변환과 XML 저장에 시간이 소요될 수 있음
 

Get 요청 처리 - getItemById

  • @GetMapping("/{id}") : /items/{id} 경로로 들어오는 GET 요청을 처리
  • 주어진 ID로 아이템을 조회
  • 존재하면 200 OK 응답
  • 존재하지 않으면 404 NOT FOUND 응답을 반환
 

POST 요청 처리 - createItem

  • @PostMapping : /items 경로로 들어오는 POST 요청을 처리
  • 요청 받은 아이템을 저장
  • 모든 아이템을 JSON으로 변환한 후 XML로 저장
 

PUT 요청 처리 - updateItem

  • @PutMapping("/{id}") : /items/{id} 경로로 들어오는 PUT 요청을 처리
  • 주어진 ID의 아이템을 조회
  • 존재하면 업데이트 후 XML로 저장
  • 존재하지 않으면 404 NOT FOUND 응답을 반환
 

DELETE 요청 처리 - deleteItem

  • @DeleteMapping("/{id}") : /items/{id} 경로로 들어오는 DELETE 요청을 처리
  • 주어진 ID의 아이템을 삭제
  • 모든 아이템을 JSON으로 변환한 후 XML로 저장
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.List; import java.util.Optional; @RestController @RequestMapping("/items") @CrossOrigin(origins = "http://localhost:8080") public class ItemController { @Autowired private ItemRepository itemRepository; @Autowired private FileStorage fileStorage; @GetMapping public ResponseEntity<String> getItems() { try { String jsonFromXml = fileStorage.getItemsAsJson(); return new ResponseEntity<>(jsonFromXml, HttpStatus.OK); } catch (IOException e) { List<Item> items = itemRepository.findAll(); try { String jsonFromDb = new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(items); return new ResponseEntity<>(jsonFromDb, HttpStatus.OK); } catch (IOException jsonException) { return new ResponseEntity<>("Error occurred while converting data to JSON", HttpStatus.INTERNAL_SERVER_ERROR); } } } @GetMapping("/{id}") public ResponseEntity<Item> getItemById(@PathVariable int id) { Optional<Item> item = itemRepository.findById(id); return item.map(i -> new ResponseEntity<>(i, HttpStatus.OK)) .orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND)); } @PostMapping public ResponseEntity<Item> createItem(@RequestBody Item item) { try { Item createdItem = itemRepository.save(item); saveAllItemsToXml(); return new ResponseEntity<>(createdItem, HttpStatus.CREATED); } catch (IOException e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } @PutMapping("/{id}") public ResponseEntity<Item> updateItem(@PathVariable int id, @RequestBody Item item) { Optional<Item> existingItem = itemRepository.findById(id); if (existingItem.isPresent()) { try { item.setId(id); Item updatedItem = itemRepository.save(item); saveAllItemsToXml(); return new ResponseEntity<>(updatedItem, HttpStatus.OK); } catch (IOException e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } @DeleteMapping("/{id}") public ResponseEntity<Void> deleteItem(@PathVariable int id) { itemRepository.deleteById(id); try { saveAllItemsToXml(); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } catch (IOException e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } private void saveAllItemsToXml() throws IOException { List<Item> items = itemRepository.findAll(); String jsonData = new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(items); fileStorage.saveItemsAsXml(jsonData); } }
Share article

vosw1