Class 시작 전 작성 할 Annotation
@RestController : 기존 Controller 에서 Rest를 붙여줘서 RestController 임을 알려준다.
@CrossOrigin(Origins =" * ") : CrossOrigin 어노테이션은 여러 Properties를 가지고 있다. 그 중, origins는 허용할 도메인을 나타낸다.
CrossOrigin 어노테이션에 대한 글이니까 참조!
REST API CrossOrigin Annotation 간단 정리
Front와 Back 으로 나눠서 개발을 진행 하는 수업을 하였다. 근데 말입니다? 코드가 틀린 곳이 없는데 자꾸 에러가 뜨는거에요? 자꾸 CORS가 어쩌고 저쩌고, CrossOrigin이 어쩌고 저쩌고 이런 말이 개발
henniee.tistory.com
@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 |