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