스프링부트 입문 3. GET API

min seung moon·2021년 6월 26일
0

Spring

목록 보기
20/50

1. 프로젝트 테스트

  • Package : controller
  • Class : GetApiContoller

01. Base

  • GetApiContoller.java
package com.example.hello.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// Controller로서 동작하기 위해서는 어노테이션
@RestController
// 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestMapping("/api/get")
public class GetApiController {

}

02. GetApiContoller.java

  • @GetMapping
    • contoller + click
    • @GetMapping("/hello") == @GetMapping(path = "/hello")
      • default는 value이기에 path가 지정 된다
  • @RequestMapping
    • 예전에 사용했지만 사용하기 불편하여 최근에 사용은 안함
    • value(path)만 지정하면 get, post, put, delete 모든 요청에 응답
    • @RequestMapping(path = "/hi", method = RequestMethod.GET)으로 포커싱을 해주어야 함
  • GetApiContoller.java
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;

// Controller로서 동작하기 위해서는 어노테이션
@RestController
// 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestMapping("/api/get")
public class GetApiController {

    // http://localhost:8090/api/get/hello
    @GetMapping(path = "/hello")
    public String getHello() {
        return "get Hello";
    }

    // get / post / put / delete 모두에 동작
    // http://localhost:8090/api/get/hi
    @RequestMapping(path = "/hi", method = RequestMethod.GET)
    public String hi() {
        return "hi";
    }
}

  • 테스트 실행


03. Path Variable 지정

-1. 기본 사용

  • @GetMapping("/경로/{PathVariable}")
  • @PathVariable
    • URL 경로에 변수를 넣어주는것
    • URL 정의 부분과 Method 내의 Parameter 부분에 정의를 하여 사용
    • 어노테이션 값으로 {템플릿변수} 를 사용
    • @PathVariable 어노테이션을 이용해서 {템플릿 변수} 와 동일한 이름을 갖는 파라미터를 추가
  • GetApiController.java
package com.example.hello.controller;

import org.springframework.web.bind.annotation.*;

// Controller로서 동작하기 위해서는 어노테이션
@RestController
// 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestMapping("/api/get")
public class GetApiController {

    // http://localhost:8090/api/get/path-variable/{name}
    // http://localhost:8090/api/get/path-variable/{spring}
    // http://localhost:8090/api/get/path-variable/{java}
    // ...
    @GetMapping("/path-variable/{name}")
    public String pathValiable(@PathVariable String name) {
        System.out.println("PathVariable : "+name);
        return name;
    }
}

-2. 혹여 파라미터 명과 path-variable의 템플릿 명이 다를 경우

  • @PathVariable(name="templateName") String parameterName
  • GetApiController.java
package com.example.hello.controller;

import org.springframework.web.bind.annotation.*;

// Controller로서 동작하기 위해서는 어노테이션
@RestController
// 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestMapping("/api/get")
public class GetApiController {

    // http://localhost:8090/api/get/path-variable/{name}
    // http://localhost:8090/api/get/path-variable/{spring}
    // http://localhost:8090/api/get/path-variable/{java}
    // ...
    @GetMapping("/path-variable/{name}")
    public String pathValiable(@PathVariable(name="name") String pathName) {
        System.out.println("PathVariable : "+pathName);
        return pathName;
    }
}


  • 실행 테스트

04. Quesry Parameter 지정

-1. 어노테이션 및 메소드 정리

  • ?로 시작, &로 구분
    • url?name=intelij&title=intelij
    • key = value 형태
  • @RequestParam
    • GET방식으로 넘어온 URI의 Quesry Parameter을 받기위한 어노테이션
  • Map map.entrySet()
    • entrySet() 메서드는 key와 value의 값이 모두 필요한 경우 사용

-2. 기본 사용법

  • GetApiController.java
package com.example.hello.controller;

import org.springframework.web.bind.annotation.*;

import java.util.Map;

// Controller로서 동작하기 위해서는 어노테이션
@RestController
// 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestMapping("/api/get")
public class GetApiController {

    // https://www.google.com/search?q=IntelliJ&oq=in&aqs=chrome.3.69i59l2j69i57j69i59j69i60l2j69i61j69i60.1399j0j7&sourceid=chrome&ie=UTF-8
    // ?q = IntelliJ
    // &oq = in
    // &aqs = chrome.3.69i59l2j69i57j69i59j69i60l2j69i61j69i60.1399j0j7
    // &sourceid = chrome
    // &ie = UTF-8

    // http://localhost:8090/api/get/query-param?user=steve&email=steve@gmail.com&age=30
    @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();
    }
}


-3. query set을 명확하게 지정

  • @RequestParam을 여러개 지정
  • 갯수가 많으면 힘듬 다음 방법 추천
package com.example.hello.controller;

import org.springframework.web.bind.annotation.*;

import java.util.Map;

// Controller로서 동작하기 위해서는 어노테이션
@RestController
// 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestMapping("/api/get")
public class GetApiController {

    // https://www.google.com/search?q=IntelliJ&oq=in&aqs=chrome.3.69i59l2j69i57j69i59j69i60l2j69i61j69i60.1399j0j7&sourceid=chrome&ie=UTF-8
    // ?q = IntelliJ
    // &oq = in
    // &aqs = chrome.3.69i59l2j69i57j69i59j69i60l2j69i61j69i60.1399j0j7
    // &sourceid = chrome
    // &ie = UTF-8

    // http://localhost:8090/api/get/query-param?user=steve&email=steve@gmail.com&age=30
    @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();
    }

    // query set을 명확하게 지정
    @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;
    }
}


-4. dto를 사용

  • Package : dto
  • Class : UserRequest
  • @RequestParam 어노테이션 사용 안함
    • 객체 내부의 변수와 쿼리 셋의 파라미터 명을 비교 매칭
  • UserRequest.java
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 +
                '}';
    }
}

  • GetApiController.java
package com.example.hello.controller;

import com.example.hello.dto.UserRequest;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

// Controller로서 동작하기 위해서는 어노테이션
@RestController
// 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestMapping("/api/get")
public class GetApiController {

    // https://www.google.com/search?q=IntelliJ&oq=in&aqs=chrome.3.69i59l2j69i57j69i59j69i60l2j69i61j69i60.1399j0j7&sourceid=chrome&ie=UTF-8
    // ?q = IntelliJ
    // &oq = in
    // &aqs = chrome.3.69i59l2j69i57j69i59j69i60l2j69i61j69i60.1399j0j7
    // &sourceid = chrome
    // &ie = UTF-8

    // http://localhost:8090/api/get/query-param?user=steve&email=steve@gmail.com&age=30
    @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();
    }

    // query set을 명확하게 지정
    @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;
    }

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


}


profile
아직까지는 코린이!

0개의 댓글