Spring Boot

GET(QueryParame ter), POST

운동하는 주니어개발자 2023. 4. 22. 01:53

오늘배운 내용은 저번시간에 배운 GET방식의 PathVariable 실습에 이어서 오늘은 GET방식의 QueryParame ter메소드에 대해 실습하고 POST방식의 메소드도 실습해보았다. 우선 GET방식의 PathVariable에 대해 설명하겠다.

GET방식의 QueryParame ter

GET방식의 QueryParame ter에는 총 3가지 방법이 있다.

첫번째 방법은 Map을 이용하여 매핑하는 방법

package com.example.hello.controller;

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

import java.util.Map;

@RestController
@RequestMapping("/api/get")
public class GetApiController {

    // http://localhost:9090/api/get/query-param?user=steve&email=steve@gmail.com&age=23
    // 첫번째 방법
    @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();
    }

Map을 이용하여 매핑하는 방법

두번째 방법은 @RequestParam을 이용하는 방법

package com.example.hello.controller;

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

import java.util.Map;

@RestController
@RequestMapping("/api/get")
public class GetApiController {

// 두번째 방법
    @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;
    }

@RequestParam을 이용하는 방법

세번째 방법은 현업에서 제일 많이 사용하는 dto패키지를 생성하고 변수 선언 후

getter와setter를 생성하여 매핑해주는 방법이다.

UserRequest (DTO)

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

package com.example.hello.controller;

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

import java.util.Map;

@RestController
@RequestMapping("/api/get")
public class GetApiController {

// 3번째 방법 현업에서 제일 많이 사용하는 방법
    // dto라는 패키지를 생성하고 원하는 값의 변수를 선언 후 getter, setter를 만들어준다.
    @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패키지를 생성하고 변수 선언 후 getter와setter를 생성하여 매핑해주는 방법

다음은 post방식에 대한 실습이다. post방식에는 2가지를 실습하였다.

get방식과 같이 Map을 이용한 방법과 DTO를 이용한 방식 2가지에 대해 설명하겠다.

처음으로는 PostApiController에 대해 코드 작성 후 2가지 방법을 이용한다.

package com.example.post.controller;

import com.example.post.dto.PostRequestDto;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/api")
public class PostApiController {

    @PostMapping("/post")
    public void post(@RequestBody PostRequestDto requestData) {
        System.out.println(requestData);
    }
}

첫번째 방법은 Map을 이용하여 매핑하는 방법

package com.example.post.controller;

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

import java.util.Map;

@RestController
@RequestMapping("/api")
public class PostApiController {

    @PostMapping("/post")
    public void post(@RequestBody Map<String, Object> requestData) {
        requestData.forEach((key, value) -> {
            System.out.println("key : " + key);
            System.out.println("value : " + value);
        });
    }
}

두번째 방법은 현업에서 제일 많이 사용하는 dto패키지를 생성하고 변수 선언 후

getter와setter를 생성하여 매핑해주는 방법이다.

PostRequestDto

package com.example.post.dto;

import com.fasterxml.jackson.annotation.JsonProperty;

public class PostRequestDto {
    private String account;
    private String email;
    private String address;
    private String password;

    @JsonProperty("phone_number")
    private String phoneNumber; // phone_number

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getEmail() {
        return email;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "PostRequestDto{" +
                "account='" + account + '\'' +
                ", email='" + email + '\'' +
                ", address='" + address + '\'' +
                ", password='" + password + '\'' +
                ", phoneNumber='" + phoneNumber + '\'' +
                '}';
    }
}

PostApiController

package com.example.post.controller;

import com.example.post.dto.PostRequestDto;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/api")
public class PostApiController {

    @PostMapping("/post")
    public void post(@RequestBody PostRequestDto requestData) {
        System.out.println(requestData);
    }
}

JSON을 이용한 입력 값
Map방식의 결과 값
DTO방식의 결과 갑

이상으로 오늘 공부는 여기서 마치도록 하겠다. 실습하는날은 이해하고 타이핑해서 따라하고 하느라 진도가 빨리 나가지는 못하는거 같다.. 얼른 정보처리산업기사를 끝내고 취업준비겸 Spring에 몰두하고 싶다.. 블로그가 안올라오는 날은 정보처리산업기사 공부를 집중적으로 하기 위해서 올리지 못한다고 알아줬으면 좋겠다. 다음 시간에는 put방식과 delete방식에 대해 실습을 해보겠다. 그럼 20000 ~~ 배위 ~~

'Spring Boot' 카테고리의 다른 글

AI 검증 비즈니스 프로젝트  (0) 2024.08.23
IoC, DI  (0) 2023.04.22
Object Mapper에 모범사례 실습  (0) 2023.04.22
PUT, DELETE, Response내려주기 실습  (0) 2023.04.22
GET API 실습  (0) 2023.04.22