Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- endif
- 1929
- struct
- scanf()
- handling
- strlen()
- DEBUG
- Docker
- 에라토스테네스의 체
- fwrite()
- ifdef
- half-close
- 카운팅 정렬
- fgets()
- fread()
- pack
- 구조체
- 정보처리기사
- container
- Kafka
- Wait
- fork
- signal
- 10989
- 필기
- 자식
- 2025
- sizeof()
- 백준
- EOF
Archives
- Today
- Total
팥빵 먹으면서 코딩하는 블로그
controller 01 - GET 본문
GET(의미: 리소스 취득)
* CRUD: R
* 멱등성: O
* 안정성: O
* Path Variable: O
* Query Parameter: O
* Data Body: X
***시작 전에 8080이 아닌 다른 port로 연결하고 싶다면, resources의 application.properties라는 모듈에 server.port = 9090(임의) 라고 작성한다.
- controller(=GET에 대한 요청을 받는 것) 패키지 속 class
package com.example.hello.controller;
import com.example.hello.dto.UserRequest;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api/get") //주소
public class GetApiController {
/*-----------------*/
/* request mapping */
/*-----------------*/
//요새 쓰는 방식
@GetMapping(path = "/hello") //http://localhost:9090/api/get/hello //get 메소드 하나만 동작됨
public String hello(){
return "get Hello";
}
//예전에 쓰던 방식
@RequestMapping(path = "/hi", method = RequestMethod.GET) // get http://localhost:9090/api/get/hi
//"hi"만 쓰면 get/ post / put / delete 모든 methods들이 실행됨
public String hi(){
return "hi";
}
/*---------------*/
/* path variable */
/*---------------*/
// http://localhost:9090/api/get까진 고정
// http://localhost:9090/api/get/path-variable/{name} //name은 계속 변할거임 ex.kotlin, java, ...
// 하지만 변화할 때마다 계속 주소를 추가할 순 없음.
// 변화하는 부분에 대해 받기 위해서는 {}를 쳐줌
@GetMapping("/path-variable/{iName}")
public String pathVariable(@PathVariable(name = "iName") String pathName ){
//변수 이름을 다른 걸로 선언하되, path variable의 name에다가 해당 {}의 속성을 적어주면 겹치지 x
//pathName은 메소드 안에서 실제로 사용하는 변수
System.out.println("PathVariable : " + pathName);
return pathName;
}
/* query parameter */
/*---------------------------------*/
/* query parameter 받는 첫번째 방법 */
/*---------------------------------*/
/* query parameter가 무한정으로 뭐가 들어올지 모를 경우에 사용한다. */
//쿼리 파라미터는 (?부터 시작함)
//검색을 할 때, 여러 매개변수의 인자를 말함.
//&연산자를 기준으로 key-value를 뜻함
//ex.
// https://www.google.com
// /search?q = %ED%81%AC%EB%A1%AC+%EC%9B%B9%EC%8A%A4%ED%86%A0%EC%96%B4 // ? 다음으로 key=value가 들어가고
// &oq = %ED%81%AC%EB%A1%AC+%EC%9B%B9%EC%8A%A4%ED%86%A0%EC%96%B4 // 다음으로 key=value가 들어가기 위해선 &가 필요함.
// &gs_lcrp = EgZjaHJvbWUyBggAEEUYOTIGCAEQIxgnMgwIAhAjGCcYgAQYigUyDQgDEAAYgwEYsQMYgAQyCggEEAAYsQMYgAQyDQgFEAAYgwEYsQMYgAQyDQgGEAAYgwEYsQMYgAQyCggHEAAYsQMYgAQyCggIEAAYsQMYgAQyCggJEAAYsQMYgATSAQgyMzU1ajBqN6gCALACAA
// &sourceid = chrome
// &ie = UTF-8
// 종합하면 규칙은 아래와 같다.
// ?key=value&key2=value2
// http://localhost:9090/api/get/query-param?user=steve&email=steve@naver.com&age=27
@GetMapping(path = "query-param")
public String queryParam(@RequestParam Map<String, String> queryParam){
//queryParam이라는 변수에 @RequsetParam 주석을 이용해 key와 value를 받을거임.
//queryParam: size=3
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();
}
/*---------------------------------*/
/* query parameter 받는 두번째 방법 */
/*---------------------------------*/
/* query parameter로 들어오는 수가 적을 때 쓰는 방법 */
//Map으로 받을 때는 모든 parameters를 받을 수 있다. 하지만 코딩할 때 key를 하나씩 지정해야한다.
//명시적으로 변수로 받기 위해서는 queryparam을 @RequestParam 주석을 이용해 하나씩 변수로 붙여주면 된다.
@GetMapping("query-param02")
public String queryParam02(@RequestParam String name,
@RequestParam String email,
@RequestParam int age){ //int의 경우에는 string형을 client가 넣으면 400에러가 남.
System.out.println(name);
System.out.println(email);
System.out.println(age);
return name+" "+email+" "+age;
}
/*---------------------------------*/
/* query parameter 받는 세번째 방법 */
/*---------------------------------*/
/* 현업에서 가장 많이 쓰이는 방법 */
//가장 추천하는 방법: 객체를 미리 정의해 받아오는 방법
@GetMapping("query-param03")
public String queryParam03(UserRequest userRequest){ //주석을 붙이지 않음.
// 객체가 들어오게 되면 ?뒤의 값들을 spring boot가 판단을 한다.
// key에 해당하는 이름들을 해당 객체에서 변수와 이름 매칭을 해주게 됨.
System.out.println(userRequest.getName());
System.out.println(userRequest.getEmail());
System.out.println(userRequest.getAge());
return userRequest.toString();
}
}
- dto 패키지 속 class (query parameter를 객체로 받아오기 위해 만듦)
- class 이름: UserRequest
package com.example.hello.dto;
public class UserRequest {
private String name;
private String email;
private int age;
/* copy->Generate->Getter and Setter-> 쉬프트 누르고 파라미터 전체 선택->생성 */
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 +
'}';
}
}
'study > JAVA SPRING' 카테고리의 다른 글
controller 00. (0) | 2024.08.29 |
---|---|
controller 05 - RESPONSE (0) | 2024.08.29 |
controller 04 - delete (0) | 2024.08.28 |
controller 03 - PUT (0) | 2024.08.28 |
controller 02 - POST (0) | 2024.08.25 |