티스토리 뷰
📌 230824 TIL : [Spring Boot] GET, POST, PUT, DELETE 방식 처리
드디어 스프링부트 공부 시작이다 ㅎㅎ
아직 웹 초반이지만 그래도 지금까지 하던게 있으니까 쉬운 부분은 빠르게 복습한다는 느낌으로 공부하고 넘어가는게 목표다
처음으로 코멘트 달아보는데 나쁘지 않을지도..!
1. 스프링부트 개발 환경 세팅
- 빌드 툴 : gradle
- jdk : java 17
학생 메일이 아직 살아있기 때문에 학생용 인텔리제이를 사용할 수 있어서 바로 스프링부트 프로젝트를 제작하였다.
강사님이 빌드 툴을 gradle 로 하시기 때문에 gradle 로 했고, Lombok과 Spring Web 의존성 설치를 완료했다.
강사님께서 실습이지만 MVC 구조를 활용하고 있어, 마찬가지로 컨트롤러와 모델 패키지를 만들어서 실습하였다.
또한 HTTP 방식들을 처리하는 API는 클래스 앞에 해당 어노테이션을 설정해줘야한다.
@Slf4j //log.~ 사용 가능
@RestController //rest 처리하는 곳
@RequestMapping("/api") //리퀘스트 맵핑
public class RestApiController {
📝 GET / DELETE : Path Variable, query parameter 가 가능한 방식.
1) GET 방식
- GET방식은 URL에 Query parameter를 넣어 보내는 방식이다.
- 리소스를 읽는 용도이다. CRUD 중 R.
- 리소스를 읽기만 하기 때문에 멱등하고 안정하다.
보통 두가지 방법을 처리한다.
1. Path Variable 방식 : http://localhost:8080/api/echo/steve/age/20/is-man/true
2. Request Parameter 방식 : http://localhost:8080/api/book?category=IT&issuedYear=2023&issued-month=01&issued_day=31
1. Path Variable 방식 (/age/20/is-man/true) : @PathVariable 사용.
- @getMapping 안 에 있는 변수와 이름이 일치해야하지만, 일치하지 않을 경우 name 속성을 사용하면 된다.
//http://localhost:8080/api/echo/steve/age/20/is-man/true
@GetMapping("/echo/{message}/age/{age}/is-Man/{isMan}")
public String echo(
@PathVariable(name="message") String msg,
@PathVariable int age,
@PathVariable boolean isMan) {
System.out.println("echo message: " + msg);
System.out.println("age = " + age);
System.out.println("isMan = " + isMan);
// TODO String 타입의 변수 외에 다른 타입 받아보기.: boolean, integer
// int 가 Integer 보다 나은 이유: int의 기본형은 0, Integer는 null 이기 때문에 에러를 막고자 int가 낫다.
return msg;
}
2. Request Parameter 방식 (book?category=IT&issuedYear=2023) : @ResquestParam 사용.
- @getMapping 안 에 있는 변수와 이름이 일치해야하지만, 일치하지 않을 경우 name 속성을 사용하면 된다.
//http://localhost:8080/api/book?category=IT&issuedYear=2023&issued-month=01&issued_day=31
@GetMapping(path = "/book")
public void queryParam(
@RequestParam String category,
@RequestParam String issuedYear,
@RequestParam(name="issued-month") String issuedMonth,
@RequestParam(name="issued_day") String issuedDay
) {
System.out.println("category = " + category);
System.out.println("issuedYear = " + issuedYear);
System.out.println("issuedMonth = " + issuedMonth);
System.out.println("issued_day = " + issuedDay);
}
혹은 새로운 커스텀 자료형 클래스를 만들어서 활용해도 된다.
파라미터의 개수가 많을 경우 이 방법을 추천한다.
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BookQueryParam {
private String category, issuedYear, issuedMonth, issuedDay;
}
--
@RestController
@RequestMapping("/api")
public class RestApiController {
@GetMapping(path = "/book2")
public void queryParamDTO(BookQueryParam bookQueryParam) {
System.out.println("bookQueryParam = " + bookQueryParam);
}
}
2) DELETE 방식
- 리소스의 삭제 CRUD 중 D, 역할을 할 때 사용한다.
- GET 방식과 똑같이 PathVariable 방식, Request Parameter 방식 사용 가능하다.
@DeleteMapping(path={"/user/{username}/delete", "/user/{username}/del"})
//path 넣어주면 여러 주소랑 맵핑이 가능함.
public void delete(@PathVariable String username) {
log.info("user-name : {}", username);
}
📝 POST / PUT 방식 : HTTP Body에 넣어서 가져오는 방식
1) POST 방식
Post 방식은 HTTP body에 데이터를 넣어 전달. 핀테크 분야 같은 보안이 중요한 경우 POST를 더 많이 사용한다.
넣는 데이터의 포맷은 JSON, TEXT, HTML 같을 수 있다.
또한 POST 방식은 Get과 다르게 파라미터가 기본이 객체로 전달 되므로 따로 클래스로 선언되어져 만들어진 객체를 사용한다.
Post 방식 연습하기 사이트 : 크롬 웹스토어 api-tester 검색 후 밑의 프로그램 설치.
방법 ) @RequestBody 이용
- JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class) :
변수명 userName 같은 경우를 카멜케이스(camel case)라고 하는데,
json으로 보낼 때 스네이크 케이스(snake case) 방식으로 바꾸어 보내준다.
snake case 란, 언더바가 있는 변수명 스타일 즉 user_name이다.
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class) //user_name,
public class UserRequest {
private String userName, userEmail;
private int userAge;
private Boolean isKorean;
//boolean 타입은 lombok에 의해 자동생성된 setter 는 is를 무시한채 setKorean으로 저장됨.그래서 Boolean으로 해줘야함.
}
--
@RestController
@RequestMapping("/api")
public class PostApiController {
// http://localhost:8080/api/post/user
@PostMapping("/post/user")
public UserRequest post2(@RequestBody UserRequest userRequest) {
System.out.println(userRequest);
return userRequest;
}
결과
2) PUT 방식
- 리소스의 갱신, 생성 용도이다.
- post와 마찬가지로 body에 값을 넣어 주고받는다.
- log 사용할 때에는 {} 에 자동으로 객체정보를 넣어준다.
@Slf4j //log 관련 어노테이션
@RestController
@RequestMapping("/api")
public class PutApiController {
@PutMapping("/put")
public void put(
@RequestBody UserRequest userRequest) {
log.info("request : {}", userRequest);
//로그가 자체로 버퍼를 가져 출력하기 때문에, System.out.print 보다 성능이 좋음. 또한 커스텀도 가능함.
}
}
결과 )
'백엔드 공부하기 > TIL' 카테고리의 다른 글
230829 TIL : [Spring boot] 예외처리, ExceptionHandler (0) | 2023.08.29 |
---|---|
230825 TIL : (mac) MySql 설치 및 Java로 연결 (0) | 2023.08.25 |
230823 TIL : HTTP, REST, URI, 스프링 부트란 (0) | 2023.08.23 |
230822 TIL : 쓰레드, 멀티 쓰레드 정리 (0) | 2023.08.23 |
230822 TIL : 직렬화, 역직렬화 (0) | 2023.08.22 |
- Total
- Today
- Yesterday
- 스터디후기
- 자료구조
- 패스트캠퍼스강의
- 채팅기능개발
- 그룹스터디
- springboot
- 야놀자X패스트캠퍼스부트캠프
- 카카오API
- 백엔드
- 자료구조 #스택 #큐 #덱 #선형자료구조
- qjzl
- 부트캠프
- 과정중간회고
- 패스트캠퍼스
- TiL
- Java
- 국비지원캠프
- 백준
- 프로젝트후기
- #국비지원취업
- boj
- 야놀자
- 커리어멘토링
- 국비지원취업
- 그룹스터디워크샵
- 데이터베이스
- 백엔드개발자
- be
- 국비지원
- 백엔드부트캠프
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |