본문 바로가기
Spring

Get API

by step 1 2021. 6. 12.
반응형

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