스프링부트 입문 4. POST API

min seung moon·2021년 6월 26일
0

Spring

목록 보기
21/50
post-thumbnail

1. POST 프로젝트

01. Spring Initalizr

02. 프로젝트 세팅

  • resources / application.properties, server.port = 8090
  • Package : controller
  • Class : PostApiController

03. 프로젝트 작성

  • @RequestBody
    • 클라이언트가 전송하는 Json(application/json) 형태의 HTTP Body 내용을 Java Object로 변환시켜주는 어노테이션
    • @RequestBody로 받는 데이터는 Spring에서 관리하는 MessageConverter들 중 하나인 MappingJackson2HttpMessageConverte를 통해 Java 객체로 변환

-1. post()

  • PostApiController.java
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);
        });

    }
}



-2. dto 생성

  • 객체로 간편하게 사용하기
  • Package : dto
  • Class : PostRequestDto
  • PostRequestDto.java
package com.example.post.dto;

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

    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 + '\'' +
                '}';
    }
}



-3. Object Wrapper(만약에 자바는 카멜케이스이고 Json 전송은 스네이크 케이스인 경우)

  • 만약에 자바는 카멜케이스이고 Json 전송은 스네이크 케이스인 경우
  • PostRequestDto.java
package com.example.post.dto;

public class PostRequestDto {
    private String account;
    private String email;
    private String address;
    private String password;
    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 + '\'' +
                '}';
    }
}


  • 해결 방법
    • @JsonProperty(전송받은 Key 명)
      • 객체의 JSON 변환시 key의 이름을 개발자가 원하는대로 설정해주는 어노테이션
      • jackson 라이브러리를 다운받아야 한다
  • PostRequestDto.java
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 + '\'' +
                '}';
    }
}



  • 스네이크도 카멜 케이스도 아닌경우 마찬가지로 @JsonProperty 어노테이션 사용
    • OTP 처럼 줄임말을 사용할 때





3. 어노테이션 정리 표(get, post)

profile
아직까지는 코린이!

0개의 댓글