[Spring Boot] GET API

16559 단어 Spring bootSpring boot

Controller

  • springboot에서 요청을 받는 부분

GET

  • 리소스 취득
  • CRUD 중 Read
  • 멱등성, 안정성을 가진다.
  • Path Variable, Query Parameter를 가진다.

예제

@RestController
@RequestMapping("/api/get/")
public class GetApiController { }
    @GetMapping(path = "/hello")
    public String hello() {
        return "get Hello";
    }
  • @RequestMapping : method를 지정하지 않으면 get, post, put, delete 모두 동작
    @RequestMapping(path = "/hi", method = RequestMethod.GET)
    public String hi() {
        return "hi";
    }
    @GetMapping("/path-variable/{name}")
    public String pathVariable(@PathVariable String name) {
        System.out.println("PathVariable : "+name);
        return name;
    }
  • Path Variable name 속성 : 주소 맵핑과 변수명을 다르게 작성 할 경우 @PathVariable에 name 속성 사용
    @GetMapping("/path-variable2/{id}")
    public String pathVariable2(@PathVariable(name = "id") String pathName) {
        System.out.println("PathVariable : "+pathName);
        return pathName;
    }
  • Query Parameter :
    - 기본 구조 : ?key=value&key2=value2...
    - 방법1 : query param을 맵 형식으로 받을 경우 key의 값을 알 수 없다.

    @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();
    }

    - 방법2 : query param을 명식적으로 작성 할 수 있다. 그러나 개수가 많아지면 관리가 어렵다.

    @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;
    }

    - 방법3 : query param을 명시적으로 작성 할 수 있으며, 따로 dto 객체를 만들어 사용하기 때문에 관리에 용이하다. 가장 많이 사용하는 방식이다.

    //현재 패키지 안에 'dto'라는 패키지 생성 후 'UserRequest' 파일을 만든다.
    //dto/UserRequest.java
    public class UserRequest {
    
    private String name;
    private String email;
    private int age;
    
    //getter, setter...
    
    @Override
    public String toString() {
        return "UserRequest{" +
                "name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
        }
    
    }
    
    
    //GetApiController.java
    @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();
    }

DTO (Data Transfer Object)

  • 계층 간의 데이터 교환을 위해 사용하는 객체이다.
  • 따로 로직을 가지지 않고, getter/setter 메소드만 가진다.

@ReqeustParam

  • query string 방식으로 url을 통해 parameter로 값을 받아온다.
  • requried 값은 기본적으로 true 이므로 parameter가 반드시 url에 담겨있어야 한다. 없을 경우 400 에러를 반환한다.

좋은 웹페이지 즐겨찾기