Class 시작 전 작성 할 Annotation
@RestController : 기존 Controller 에서 Rest를 붙여줘서 RestController 임을 알려준다.
@CrossOrigin(Origins =" * ") : CrossOrigin 어노테이션은 여러 Properties를 가지고 있다. 그 중, origins는 허용할 도메인을 나타낸다.
CrossOrigin 어노테이션에 대한 글이니까 참조!
@RequestMapping("/memos") : 기존 Controller 와 같이 Mapping 방식에 대한 내용. Rest 원칙에 따라 리소스는 복수명사로 사용!
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/memos")
public class MemoController {
해당 3개는 항상 class 위에 적어 둔 다는 것을 잊지말쟈~~
Class 안에서 운용 되는 메서드 작성 방법
작성 (Insert)
작성은 Post 방식으로 보낸다. REST API는 백과 프론트를 분리하기 때문에 값을 뷰로 보내는 것이아니라 Map에 키와 값을 닮아 return 한다.
@PostMapping("")
public Map add(MemoDto dto) {
Map map = new HashMap();
MemoDto dto2 = service.save(dto);
map.put("dto", dto2);
return map;
}
Map에 dto2라는 value 를 dto 라는 key 에 담았으니 dto 라는 JSON 형태의 배열에 들어 간 것을 확인 할 수 있다.
전체리스트 (select * )
전체 리스트는 Get방식으로 데이터를 뽑는다. list 는 여러개니까 ArrayList에 담고 list 를 map 에 담아 return 한다.
@GetMapping("")
public Map list() {
Map map = new HashMap();
ArrayList<MemoDto> list = service.getAll();
map.put("list", list);
return map;
}
Postman에서 확인 가능 한 것 처럼 list 가 배열 형태로 key 와 value 로 제공 되고 있음을 알 수 있다.
검색하는 메소드 ( select 컬럼 )
검색을 하기 위해 Mapping의 파라미터로 원하는 컬럼 값을 받는다. 해당 값을 받으면 메소드에서 매핑을 진행 하는데, 그 경로의 변수를 파라미터로 지정 해 주어야 한다. 그것이 바로 @PathVariable 어노테이션이다. 해당 어노테이션에 받을 값은 Mapping에서 받은 파라미터와 이름이 동일해야 하며, 해당 경로의 변수를 int num 에 넣어 사용 하겠다는 의미이다.
그렇다면 num이 아닌 다른 컬럼을 검색 해 보고 싶다면 어떻게 해야 할까?
▶ 꼭 PK가 아니어도 되니 존재하는 컬럼명으로 정해주면 사용이 가능 하다.
그러면 두개를 한번에 검색하고 싶을때는?
▶ 하나씩 따로 값을 받아 map 에 넣거나, Dao 부터 Service 까지 계획 해 둔 코드가 있다면 그것을 활용 해도 된다.
@GetMapping("/{num2}")
public Map getByNum(@PathVariable("num2") int num) {
Map map = new HashMap();
MemoDto dto = service.getMemo(num);
map.put("dto", dto);
return map;
}
Postman에서 번호로 검색해서 확인 한 결과! 선택한 것만 잘 골라서 나오는 것을 확인 할 수 있다. URL 주소에 원하는 컬럼이름을 함 보내는 것을 잊지 말쟈
전체 컬럼 수정 (Upate)
Put 메서드로 전송하여 전과 똑같이 Map 에 보내 확인 한다.
// 전체 컬럼 수정
@PutMapping("")
public Map edit(MemoDto dto) {
Map map = new HashMap();
MemoDto dto2 = service.save(dto);
map.put("dto", dto2);
return map;
}
Postman에서 Put 방식으로 변경하고 싶은 것을 작성 해주면 된다. 단, PK 수정은 불가능!
삭제 (delete)
delete 방식을 이용해서 삭제를 진행한다. 삭제는 파라미터로 항상 PK 번호를 받으니 이 곳에서도 파라미터 값을 pk로 받아 사용한다.
@DeleteMapping("/{num}")
public Map del(@PathVariable("num") int num) {
Map map = new HashMap();
boolean flag = true;
try {
service.delMemo(num);
}catch(Exception e) {
flag = false;
}
map.put("flag", flag);
return map;
}
Postman에서 pk에 value 값을 지정 해주면 삭제 되었다는 것을 확인 할 수 있다.
전체코드
package com.example.demo.memo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //rest api controller
@CrossOrigin(origins = "*") //모든 ip로부터 요청 받기 허용
@RequestMapping("/memos") //기본 url: memo인데 ~~ 복수명사로 해야좋당
public class MemoController {
@Autowired
private MemoService service;
//추가
@PostMapping("")
public Map add(MemoDto dto) {
Map map = new HashMap();
MemoDto dto2 = service.save(dto);
map.put("dto", dto2);
return map;
}
//리스트
@GetMapping("")
public Map list() {
Map map = new HashMap();
ArrayList<MemoDto>list = service.getAll();
map.put("list", list);
return map;
}
//한개 검색
@GetMapping("/{num2}")
public Map getByNum(@PathVariable("num2")int num) {
Map map = new HashMap();
MemoDto dto = service.getMemo(num);
map.put("dto", dto);
return map;
}
//전체 컬럼 수정
@PutMapping("")
public Map edit (MemoDto dto) {
Map map = new HashMap();
MemoDto dto2 = service.save(dto);
map.put("dto", dto2);
return map;
}
//삭제
@DeleteMapping("/{num}")
public Map del(@PathVariable("num") int num) {
Map map = new HashMap();
boolean flag = true;
try {
service.delMemo(num);
}catch(Exception e) {
flag = false;
}
map.put("flag", flag);
return map;
}
}
'spring 스프링' 카테고리의 다른 글
Spring 과 Vue 의 작동 (0) | 2023.06.08 |
---|---|
웹 스토리지 객체 localStorage와 sessionStorage (0) | 2023.05.25 |
REST API CrossOrigin Annotation 간단 정리 (0) | 2023.05.24 |
REST API 기초 세팅 Postman (0) | 2023.05.23 |
REST API 개념 (0) | 2023.05.23 |