반응형
지난 포스트에서 Springboot의 설정을 마쳤고 이 포스트에서는 API를 구현하고 Postman으로 동작확인을 해보겠습니다.
전체 소스코드는 아래에 URL에 있습니다.
https://github.com/leeyoungseung/item-admin
1. DB 설치 및 테이블 생성
1) DB 설치
개발 시 사용할 DB는 MySQL(MariaDB)로 XAMPP v3.2.3을 설치하면 패키지로 설치되는 DB입니다.
https://www.apachefriends.org/blog/new_xampp_20190415.html
2) 테이블 생성
XAMPP Control Panel에서 Apache와 MySQL을 'Start'합니다.
Actions가 Stop상태가 되면 DB가 기동한 것입니다.
XAMPP에서 DB를 관리할 때 phpMyAdmin이라는 웹 페이지로 된 관리 툴을 사용할 것이므로 Apache도 실행해주어야 합니다.
MySQL의 Admin을 클릭해서 phpMyAdmin에 접속합니다.
개발 시 사용할 데이터 베이스를 생성합니다.
※ 데이터 베이스 생성 방법
'데이터 베이스' -> '새 데이터베이스 만들기' -> 데이터베이스명을 입력한 후 '만들기'버튼 클릭
생성한 데이터 베이스를 클릭 -> 상단의 SQL 메뉴에서 테이블 생성 SQL을 입력한 후 실행합니다.
※ SQL문
--
-- 테이블 구조 `item`
--
CREATE TABLE `item` (
`ITEM_ID` int(11) NOT NULL,
`ITEM_NAME` varchar(100) NOT NULL,
`ITEM_DESCRIPTION` text NOT NULL,
`MAKER_CODE` varchar(50) NOT NULL,
`PRICE` int(11) NOT NULL,
`SALE_STATUS` int(11) NOT NULL,
`IMAGES` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- 기본키 설정
--
ALTER TABLE `item`
ADD PRIMARY KEY (`ITEM_ID`);
--
-- AUTO_INCREMENT 설정
--
ALTER TABLE `item`
MODIFY `ITEM_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
COMMIT;
1. 등록 기능(C)
1) 컨트롤러
@PostMapping(path = "/items")
public ResponseEntity<String> createItemOne(@RequestBody Item item ) {
// @RequestBody : request body에 실어서 보낸 json 형식의 데이터를
// Item 객체로 매핑해준다.
log.info("ItemAdminController createItemOne Form : "+item);
return itemService.createItem(item);
}
2) 서비스
public ResponseEntity<String> createItem(Item item) {
log.info("ItemService createItem ID : "+item);
// 같은 이름의 상품이 등록되어 있는지 확인
Optional<Item> existItem = itemRepository.findByItemName(item.getItemName());
if (!existItem.isEmpty()) {
return ResponseEntity.badRequest()
.body("Item exist.");
}
// 상품정보 등록
Item createdItem = itemRepository.save(item);
// 결과 리턴
return ResponseEntity.status(HttpStatus.OK)
.body("Item applied ["+createdItem.getItemId()+"]");
}
3) 리퀘스트 예문
POST http://localhost:8080/api/items
{
"itemName":"testItem101",
"itemDescription":"testItem101_itemDescription",
"makerCode":"100",
"price":1500,
"saleStatus":1,
"images":"test.png"
}
4) Postman동작확인
2. 읽기 기능(R)
1) 컨트롤러
@GetMapping(path = "/items/{itemId}")
public ResponseEntity<Item> getItemOne(@PathVariable int itemId) {
//@PathVariable : URI경로상의 문자열, 숫자를 변수로 사용할수 있게 해줌.
log.info("ItemAdminController getItemOne ID : "+itemId);
return itemService.getItem(itemId);
}
2) 서비스
public ResponseEntity<Item> getItem(int itemId) {
log.info("ItemService getItem ID : "+itemId);
Optional<Item> item = itemRepository.findById((Integer)itemId);
log.info("ItemService Item : "+item.get());
return ResponseEntity.of(item);
}
3) 리퀘스트 예문
GET http://localhost:8080/api/items/104
4) Postman동작확인
3. 갱신 기능(U)
1) 컨트롤러
@PutMapping(path = "/items/{itemId}")
public ResponseEntity<Item> updateItemOne(@PathVariable int itemId,
@RequestBody Item item) {
// @PathVariable, @RequestBody을 같이 사용하는 것도 가능
log.info("ItemAdminController updateItemOne ID : "+itemId);
log.info("ItemAdminController updateItemOne Form : "+item);
return itemService.updateItem(itemId, item);
}
2) 서비스
public ResponseEntity<Item> updateItem(int itemId, Item item) {
log.info("ItemService updateItem ID : "+itemId);
// 상품정보가 존재하는지 확인
Item existItem = itemRepository.findById((Integer)itemId)
.orElseThrow(() -> new ResourceNotFoundException("Not Found Item : "+itemId));
log.info("ItemService updateItem exist : "+existItem);
log.info("ItemService updateItem update : "+item);
// 상품정보 갱신
existItem.setItemDescription(item.getItemDescription());
existItem.setMakerCode(item.getMakerCode());
existItem.setPrice(item.getPrice());
existItem.setSaleStatus(item.getSaleStatus());
// 결과 리턴
return ResponseEntity.ok(itemRepository.save(existItem));
}
3) 리퀘스트 예문
PUT http://localhost:8080/api/items/104
{
"itemName":"testItem101",
"itemDescription":"testItem101_itemDescriptionUpdated01",
"makerCode":"100",
"price":2500,
"saleStatus":1,
"images":"test.png"
}
4) Postman동작확인
5. 삭제 기능(D)
1) 컨트롤러
@DeleteMapping("/items/{itemId}")
public ResponseEntity<Map<String, Boolean>> deleteItemOne(@PathVariable int itemId) {
log.info("ItemAdminController deleteItemOne ID : "+itemId);
return itemService.deleteItem(itemId);
}
2) 서비스
public ResponseEntity<Map<String, Boolean>> deleteItem(int itemId) {
log.info("ItemService deleteItem ID : "+itemId);
// 상품정보 존재확인
Item existItem = itemRepository.findById((Integer)itemId)
.orElseThrow(() -> new ResourceNotFoundException("Not Found Item : "+itemId));
// 상품정보 삭제
itemRepository.delete(existItem);
// 결과 리턴
Map<String, Boolean> response = new HashMap<>();
response.put("deleted", Boolean.TRUE);
return ResponseEntity.ok(response);
}
3) 리퀘스트 예문
DELETE http://localhost:8080/api/items/104
4) Postman동작확인
반응형
'프로그래밍 > Springboot-토이프로젝트' 카테고리의 다른 글
Springboot로 구현한 API의 Response 데이터를 XML로 받아오기 (0) | 2021.09.26 |
---|---|
Springboot + JQuery Ajax로 CRUD 어플리케이션 구현-05【AWS EC2에 배포 + AWS RDS(MariaDB) 연동】 (0) | 2021.06.07 |
Springboot + JQuery Ajax로 CRUD 어플리케이션 구현-04【화면 + Jquery Ajax통신】 (0) | 2021.06.06 |
Springboot + JQuery Ajax로 CRUD 어플리케이션 구현-02【Spring boot프로젝트 설정】 (0) | 2021.06.06 |
Springboot + JQuery Ajax로 CRUD 어플리케이션 구현-01【설계】 (0) | 2021.06.05 |
댓글