GET API 만드는 다양한 방법 실습

이경영·2022년 10월 12일
0

스프링부트2

목록 보기
7/19
post-custom-banner

@RequestMapping

  • value와 method로 정의하여 API를 개발하는 방식
  • 이제는 고전적인 방법으로 사용하지 않음

@GetMapping (without Param)

  • 별도의 파라미터 없이 GETAPI를 호출하는 경우 사용되는 방법

@PathVariable

  • GET 형식의 요청에서 파라미터를 전달하기 위해 URL에 값을 담아 요청하는 방법
  • 아래 방식은 @GetMapping에서 사용된 {변수}의 이름과 메소드의 매개변수와 일치시켜야 함

@PathVariable

  • GET 형식의 요청에서 파라미터를 전달하기 위해 URL에 값을 담아 요청하는 방법
  • 아래 방식은 @GetMapping에서 사용된 {변수}의 이름과 메소드의 매개변수가 다를 경우 사용하는 방식
  • 변수 관리의 용이성을 위해 사용되는 방식

@RequestParam

  • GET 형식의 요청에서 쿼리 문자열을 전달하기 위해 사용되는 방법
  • '?'를 기준으로 우측에 {키}={값}의 형태로 전달되며, 복수 형태로 전달할 경우 &를 사용함

@RequestParam

  • GET형식의 요청에서 쿼리 문자열을 전달하기 위해 사용하는 방식
  • 아래 예시 코드는 어떤 요청 값이 들어올지 모를 경우 사용하는 방식

DTO 사용

  • GET 형식의 요청에서 쿼리 문자열을 전달하기 위해 사용하는 방법
  • key 와 value가 정해져있지만, 받아야할 파라미터가 많을 경우 DTO객체를 사용한 방식

--- 실습

com.example.testproject.controller

package com.example.testproject.controller;

import com.example.testproject.dto.MemberDTO;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController //Controller인식을 위해
@RequestMapping("/api/v1/get-api")
public class HelloController {

    //@RequestMapping(value="/hello" , method = RequestMethod.GET) //고전적 방법
    //http://localhost:8080/api/v1/get-api/hello
    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String hello(){
        return "Hello world!";
    }

    //http://localhost:8080/api/v1/get-api/name
    @GetMapping(value="/name")
    public String getName(){
        return "Flature";
    }

    //http://localhost:8080/api/v1/get-api/variable1/{String 값}
    @GetMapping(value="/variable1/{variable}")
    public String getVariable1(@PathVariable String variable){
        return variable;
    }

    //http://localhost8080/api/b1/get-api/variable2/{String 값}
    @GetMapping(value="/variable2/{variable}")
    public String getVariable2(@PathVariable("variable") String var){
        return var;
    }

    //http://localhost:8080/api/v1/get-api/request1?
    // name=flature&
    // email=thinkgroud.flature@gmail.com&
    // organization=thinkground
    @GetMapping(value="/request1")
    public String getRequestParam1(
            @RequestParam String name,
            @RequestParam String email,
            @RequestParam String organization
    ){
    return name + " " + email + " " + organization;
    }

    //어떤 것이 들어올지 예측되지 않을 경우
    //http://localhost:8080/api/v1/get-api/request2?key1=value&key2=value2
    @GetMapping(value="/request2")
    public String getRequsetParam2(@RequestParam Map<String, String> param){
        StringBuilder sb=new StringBuilder();

        param.entrySet().forEach(map -> {
            sb.append(map.getKey() + " : "+ map.getValue() + "\n");
        });

        return sb.toString();
    }

    @GetMapping(value="/request3")
    public String getRequestParam3(MemberDTO memberDTO){
        return memberDTO.toString();
    }

}

com.example.testproject.dto

package com.example.testproject.dto;

public class MemberDTO {
    private String name;
    private String email;
    private String organization;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmai() {
        return email;
    }

    public void setEmai(String emai) {
        this.email = emai;
    }

    public String getOrganization() {
        return organization;
    }

    public void setOrganization(String organization) {
        this.organization = organization;
    }

    @Override
    public String toString() {
        return "MemberDTO{" +
                "name='" + name + '\'' +
                ", emai='" + email + '\'' +
                ", organization='" + organization + '\'' +
                '}';
    }
}

profile
꾸준히
post-custom-banner

0개의 댓글