220211_스프링입문_스프링 부트 시작하기_GET API(2)_패스트캠퍼스 챌린지 19일차
<2022년 02월 11일 _ 패스트캠퍼스 챌린지 19일차>
[스프링입문_스프링 부트 시작하기_GET API(2)]
220210_스프링입문_스프링 부트 시작하기_GET API(1)_패스트캠퍼스 챌린지 18일차
220210_스프링입문_스프링 부트 시작하기_GET API(1)_패스트캠퍼스 챌린지 18일차 [스프링입문_스프링 부트 시작하기_GET API(1)] 1. 메소드의 특성 의미 CRUD 멱등성 안정성 Path Variable Query Parameter DataB..
mylife4hi.red
지난 내용에 이어서 강의 이어집니다.
1. 메소드의 특성
의미 | CRUD | 멱등성 | 안정성 | Path Variable | Query Parameter |
DataBody | |
GET | 리소스 취득 | R | O | O | O | O | X |
POST | 리소스 생성,추가 | C | X | X | O | △ | O |
PUT | 리소스 갱신, 생성 | C / U | O | X | O | △ | O |
DELETE | 리소스 삭제 | D | O | X | O | O | X |
HEAD | 헤더 데이터 취득 | - | O | O | - | - | - |
OPTIONS | 지원하는 메소드 취득 | - | O | - | - | - | - |
TRACE | 요청메시지 반환 | - | O | - | - | - | - |
CONNECT | 프록시 동작의 터널 접속으로 변경 | - | X | - | - | - | - |
2. 실습
(7) Query Parameter 받아보기
: GetApiController 클래스에 작성
package com.example.hello.controller;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api/get")
public class GetApiController {
//Query Parameter 받아보기
// search?q=intelliJ
// &sxsrf = APq-WBsyC-rn9J42ST20OGzQk576qESbsQ%3A1644556075601
// &ei = K-8FYtmgJNml2roPmMmi6AY
// &ved = 0ahUKEwiZ4svl8Pb1AhXZklYBHZikCG0Q4dUDCA4
// &uact = 5
// &oq = intelliJ
// &gs_lcp = Cgdnd3Mtd2l6EAMyBAgjECcyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgQIABBDMgcIABCxAxBDOggIABCABBCxAzoLCAAQgAQQsQMQgwE6DgguEIAEELEDEMcBENEDSgQIQRgASgQIRhgAUABY2A9guxFoAHABeACAAY8BiAHICJIBAzAuOJgBAKABAcABAQ&sclient=gws-wiz
// 시작은 ?로 시작해서 Key = value 방식
// ?key=value&key2=value2...
// http://localhost:9090/api/get/query-param?user=steve&steve@gmail.com&age=30
@GetMapping(path = "query-param")
public String queryParam(@RequestParam Map<String, String> queryParam){
StringBuilder sb = new StringBuilder();
queryParam.entrySet().forEach( entry -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
System.out.println("\n");
sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
});
return sb.toString();
}
}
(8) 서버를 다시 실행하고, Talend API로 테스트한다
http://localhost:9090/api/get/query-param?name=작막이&email=steve@gmail.com&age=31
queryParam = {LinkedHashMap@6095} size = 3
"name" -> "작막이"
key = "name"
value = "작막이"
"email" -> "steve@gmail.com"
key = "email"
value = "steve@gmail.com"
"age" -> "31"
key = "age"
value = "31"
디버깅을 해보면 값이 잘 들어간 것을 확인 할 수 있다
(9) 명확하게 key를 지정해주는 queryParam을 작성해보자
package com.example.hello.controller;
import org.springframework.web.bind.annotation.*;
import javax.websocket.server.PathParam;
import java.util.Map;
@RestController
@RequestMapping("/api/get")
public class GetApiController {
//Query Parameter 받아보기
// search?q=intelliJ
// &sxsrf = APq-WBsyC-rn9J42ST20OGzQk576qESbsQ%3A1644556075601
// &ei = K-8FYtmgJNml2roPmMmi6AY
// &ved = 0ahUKEwiZ4svl8Pb1AhXZklYBHZikCG0Q4dUDCA4
// &uact = 5
// &oq = intelliJ
// &gs_lcp = Cgdnd3Mtd2l6EAMyBAgjECcyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgQIABBDMgcIABCxAxBDOggIABCABBCxAzoLCAAQgAQQsQMQgwE6DgguEIAEELEDEMcBENEDSgQIQRgASgQIRhgAUABY2A9guxFoAHABeACAAY8BiAHICJIBAzAuOJgBAKABAcABAQ&sclient=gws-wiz
// 시작은 ?로 시작해서 Key = value 방식
// ?key=value&key2=value2...
// http://localhost:9090/api/get/query-param?user=steve&steve@gmail.com&age=30
@GetMapping(path = "query-param")
public String queryParam(@RequestParam Map<String, String> queryParam){
StringBuilder sb = new StringBuilder();
queryParam.entrySet().forEach( entry -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
System.out.println("\n");
sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
});
return sb.toString();
}
//Map으로 받을땐 뭐가 들어올 지 모르기 때문에, 명시적으로 표현해 주는 것이 좋다
@GetMapping("query-param02")
public String queryParam02(
@RequestParam String name,
@RequestParam String email,
@RequestParam int age
){
System.out.println(name);
System.out.println(email);
System.out.println(age);
return name + " " + email + " " + age;
}
}
(10) 서버를 다시 실행하고, Talend API로 테스트한다
http://localhost:9090/api/get/query-param?name=작막이&email=steve@gmail.com&age=31
(11) 숫자가 들어갈 곳에 문자가 들어가면 에러가 나게 된다
http://localhost:9090/api/get/query-param?name=작막이&email=steve@gmail.com&age=abcd
(12) 명확하게 키를 지정해주면서도, 매번 일일히 코드에 추가를 해주지 않아도 되는 dto방식으로 적용해보자
: dto 패키지 추가 & dto 패키지에 UserRequest 클래스 추가
package com.example.hello.dto;
public class UserRequest {
private String name;
private String email;
private int age;
}
: 메뉴 상단의 Code > Generate > Getters and Setters 클릭
: 세가지를 모두 선택 후 OK 클릭
package com.example.hello.dto;
public class UserRequest {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String email;
private int age;
}
(13) 파라미터로 dto클래스를 바로 적용하자! query-param03
package com.example.hello.controller;
import com.example.hello.dto.UserRequest;
import org.apache.catalina.User;
import org.springframework.web.bind.annotation.*;
import javax.websocket.server.PathParam;
import java.util.Map;
@RestController
@RequestMapping("/api/get")
public class GetApiController {
@GetMapping(path = "query-param")
public String queryParam(@RequestParam Map<String, String> queryParam){
StringBuilder sb = new StringBuilder();
queryParam.entrySet().forEach( entry -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
System.out.println("\n");
sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
});
return sb.toString();
}
//Map으로 받을땐 뭐가 들어올 지 모르기 때문에, 명시적으로 표현해 주는 것이 좋다
@GetMapping("query-param02")
public String queryParam02(
@RequestParam String name,
@RequestParam String email,
@RequestParam int age
){
System.out.println(name);
System.out.println(email);
System.out.println(age);
return name + " " + email + " " + age;
}
@GetMapping("query-param03")
//dto 방식 파라미터에선 @RequestParam 어노테이션을 붙이지 않는다
// 쿼리 String으로 들어오는 내용을 해당 UserRequest 객체에서 변수와 이름 매칭을 해준다
public String queryParam03(UserRequest userRequest){
System.out.println(userRequest.getName());
System.out.println(userRequest.getEmail());
System.out.println(userRequest.getAge());
return userRequest.toString();
}
}
※주의사항※
※dto 방식 파라미터에선 @RequestParam 어노테이션을 붙이지 않는다!! ※
붙일 경우 다음과 같은 오류 발생
package com.example.hello.dto;
public class UserRequest {
private String name;
private String email;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//자동으로 어떤 키밸류가 있는지 보여주도록
@Override
public String toString() {
return "UserRequest{" +
"name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
(14) 서버를 다시 실행하고, Talend API로 테스트한다
http://localhost:9090/api/get/query-param?name=작막이&email=steve@gmail.com&age=31
UserRequest{name='작막이', email='steve@gmail.com', age=31}
위와 같은 결과로 리턴된다
19일차 강의 완료~
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'개발새발 > Spring' 카테고리의 다른 글
220213_스프링입문_스프링 부트 시작하기_PUT API_패스트캠퍼스 챌린지 21일차 (0) | 2022.02.13 |
---|---|
220212_스프링입문_스프링 부트 시작하기_POST API_패스트캠퍼스 챌린지 20일차 (0) | 2022.02.13 |
220210_스프링입문_스프링 부트 시작하기_GET API(1)_패스트캠퍼스 챌린지 18일차 (0) | 2022.02.10 |
220209_스프링입문_스프링 부트 시작하기_Hello World API를 만들어보자_패스트캠퍼스 챌린지 17일차 (0) | 2022.02.09 |
220208_스프링입문_스프링 부트 시작하기_스프링 부트란_패스트캠퍼스 챌린지 16일차 (0) | 2022.02.08 |