반응형
Get API: 리소스 취득, Read, 멱등성, 안정성, Path Variable, Query Prarameter
코드 작성
일반적인 방법
package com.example.hello.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/get")
public class GelApiController {
// 최근에 사용하는 방법
// path: 명확하게 경로 설정
@GetMapping(path = "/hello") // http://localhost:8081/api/get/hello 으로 동작
public String getHello() {
return "get Hello";
}
// 예전에 사용하던 방법
// @RequestMapping("/hi") // get/ post / put / delete 모든 메소드 동작
@RequestMapping(path = "/hi", method = RequestMethod.GET) // get http://localhost:8081/api/get/hi 으로 동작
public String hi(){
return "hi";
}
}
확인(포트가 중복되어서 변경함)
Path Variable: 변하는 경로를 받는 방법(@PathVariable)
// 변하는 경로를 설정하는 방법 (@PathVariable 파라미터 값을 이용)
//http://localhost:8081/api/get/path-variable/{name}
@GetMapping("/path-variable/{name}")
public String pathVariable(@PathVariable String name){
System.out.println("PathVariable: " + name);
return name;
}
위와 같은 동작을 하는 다른 코드
// 매칭되어야 하는 파라미터 이름이 달라야할 경우
//http://localhost:8081/api/get/path-variable2/{name}
@GetMapping("/path-variable2/{name}")
public String pathVariable2(@PathVariable(name = "name") String pathname, String name){
System.out.println("PathVariable: " + pathname);
return pathname;
}
Query Prarameter : 검색할 때 매개변수 인자를 의미, ? 를 기준으로 뒤쪽, & 로 매개변수를 구분
// ?key = value & key2 = value2
@RequestParam 어노테이션 사용
Map을 이용하여 모든 파라미터를 받는 쿼리
장점: 파라미터의 제한없이 받을 수 있다.단점: 나중에 파라미터로 데이터를 처리할 경우 좀더 복잡해진다.
/ http://localhost:8081/api/get/query-param?user=steve&email=steve@gmail.com&age=30
@GetMapping(path = "query-param")
// Map으로 받는 경우에는 어떤 key값을 입력해도 모두 받을수 있다.
public String queryParam(@RequestParam Map<String, String> queryParam){
// 버퍼 생성
StringBuilder sb = new StringBuilder();
// Map으로 받는 경우 (받을 값을 지정)
String name = queryParam.get("name");
System.out.println("Map으로 받기 테스트: " + name );
// Map 데이터 가져오기
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");
}
);
파라미터를 지정해서 받는 방법
장점: 나중에 파라미터로 처리하는 작업을 진행할 경우 좀 더 간편해진다.
단점: 파라미터가 많아질수록 쿼리가 길어진다.
//파라미터를 지정해서 받는 방법
@GetMapping(path = "query-param2")
public String queryParam2(@RequestParam String name, @RequestParam String email, @RequestParam int age){
System.out.println(name + " " + email + " " + age);
return name + " " + email + " " + age;
}
age에 문자를 입력하면 에러 발생
400에러는 사용자의 입력 오류
DTO로 받는 방법(현업에서 가장 많이 사용, @RequestParam 사용 안함)
dto 변수와 파라미터 이름이 매칭되어 사용된다. (존재하지 않는 key 값은 누락된다.)
dto 생성
package com.example.hello.dto;
// 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 +
'}';
}
}
controller 추가
//dto를 사용하는 방법
// @RequestParam 어노테이션 사용안함
@GetMapping(path = "query-param3")
public String queryParam3(UserRequest userRequest){
System.out.println(userRequest.getName() + " " + userRequest.getEmail() + " " + userRequest.getAge());
return userRequest.toString();
}
존재하지 않는 key값은 누락
반응형
'Spring' 카테고리의 다른 글
PUT API (0) | 2021.06.12 |
---|---|
Post API (0) | 2021.06.12 |
Hello World API 만들기 (0) | 2021.06.12 |
Spring Boot (0) | 2021.06.12 |
HTTP (0) | 2021.06.06 |