스프링 입문
스프링 입문 4.2 GET API
코딩펭귄
2024. 1. 3. 03:09
import com.example.hello.dto.UserRequest;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api/get/")
public class GetApiController {
//1. 명확하게 경로를 지정해주는 방법 : path = "/hello" (현재 사용 중인 방법)
@GetMapping(path = "/hello") // http://localhost:9090/api/get/hello
public String getHello(){
return "get Hello";
}
//2. 예전에 쓰던 방법 리퀘스트매핑방법
// @RequestMapping("hi") // -> get/post/put/delete 등 모든 메소드가 매핑됨
@RequestMapping(path = "/hi", method = RequestMethod.GET) // -> get만 지정됨 http://localhost:9090/api/get/hi
public String hi(){
return "hi";
}
path variable 받는 방법
// http://localhost:9090/api/get/path-variable{name}
@GetMapping("/path-variable/{name}")
public String pathVariable(@PathVariable String name){
System.out.println("PathVariable : " + name);
return name;
}
// name이 또 들어가야 되는 경우 즉, path variable의 주소에 name 지정했지만,
// 변수에는 이름을 다르게 설정해야 하는 경우
@GetMapping("/path-variable/{name}")
public String pathVariable(@PathVariable(name = "name") String pathname, String name){
System.out.println("PathVariable : " + pathname);
return pathname;
}
Query Parameter 받는 방법
- Query Parameter 은 어떻게 받아야 하는가? : 검색을할때 여러가지 매개변수 인자를 이야기 함
형태 : ?key=value&key2=value2
방법1
- 무한정, 뭐가 들어올지 몰라 : Map
// http:locolhost:9090/api/get/query-param?user=steve&email=steve@gmail.com&age=30
@GetMapping(path = "query-param")
// query param을 받을수 있는 방법 1 : Map : 무한정, 뭐가 들어올지 몰라
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();
}
방법 2
- 명시적 annotation, 쿼리 파라미터로 몇가지 값이 안들어올경우(적게 들어올경우)
// query param을 받을수 있는 방법 2 (명시적 annotation, 지정) : query parameter로 몇가지 안들어올 경우
@GetMapping("query-param02")
public String queryParam02(
@RequestParam String name,
@RequestParam String email,
@RequestParam int age //문자열들어가면 400에러 남
){
System.out.println(name);
System.out.println(email);
System.out.println(age);
return name + " " + email + " " + age;
}
방법3
- 현업에서 젤 많이 사용
- 미리 query parameter 에 대해 정의 해 놨을 경우, 객체(UserRequest)만들어서 받는 형태를 활용 (객체를 만들어서 쿼리 파라미터가 바로 맵핑이 되도록 하는 형태) - dto 구조 사용
- 패키지에다가 미리 정의 : dto > UserRequest 에 미리 변수를 선언
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 +
'}';
}
}
@GetMapping("query-param03")
public String queryParam03(UserRequest userRequest){
System.out.println(userRequest.getName());
System.out.println(userRequest.getEmail());
System.out.println(userRequest.getAge());
return userRequest.toString();
}