티스토리 뷰

반응형

POST 방식은 CRUD에서 CREATE 부분을 담당한다. 요청할 때마다 매번 생성되기 때문에 명등성과 안정성이 없다. Path Variable을 가능하지만, DataBody를 통해 데이터를 넣고 생성되어 있는 데이터를 사용하기 때문에 굳이 Query Parameter를 사용하지 않는다.

 

 

데이터는 XML이나 JSON으로 주로 주고 받는다. 현재 현업에서는 대부분 JSON으로 데이터를 주고 받는다.

 

중요한 것부터 적어보겠다.

1. 반드시 가장 바깥쪽은 { } 괄호로 시작한다.

2. 모든 값은 "key" : "value" 와 같은 형식으로 키 벨류 형식으로 이루어져 있다.

3. JSON의 데이터는 string, number, boolean, object, array 형태가 value값에 들어갈 수 있다.

문자열은 ""로 묶어주면 되고, 숫자나 boolean(false, true)은 바로 적어주면 된다.

4. object는 {}형태로 묶을 수 있고, array는 [] 형태로 되어있다.

5. JSON은 snake_case를 많이 쓴다. (단어의 구별마다 _(언더바)를 쓴다.)

6. snake_case 뿐만 아니라 JSON으로 camelCase로도 파싱이 가능하게 해야한다. (둘다 할 줄 알아야한다.)

7. array는 같은 값의 반복이다. 리스트 내부에 객체가 들어가고, 그 객체의 키는 반복되어야 한다는 뜻이다.

 

JSON의 예는 아래와 같다. array(배열)의 경우는 해당 키의 배열을 선언해 주고 같은 키를 가진 object를 표현해 주면 된다.

{
    "phone_number" : "010-0000-0000",
    "age" : 10,
    "isAgree" : false,
    "account" : {
        "email" : "hanpy@gmail.com",
        "password" : "1234"
    }
}

// 배열안에 object가 여러개 들어가는 형태가 쓰인다.
// object는 같은 값의 반복이 이어진다.
{
    "user_list" : [
        {
            "account" : "aaa",
            "password" : "123"
        },
        {
            "account" : "bbb",
            "password" : "123123"
        },
    ]
}

 

 

요청 받는 경우의 예를 생각해 보자.

사용자의 계정 생성 시 계정, 이메일, 암호, 주소를 받는다고 생각해 보면 json의 형식은 아래와 같을 것이다.

 

{
    "account" : "",
    "email" : "",
    "password" : "",
    "address" : ""
}

 

 

 

인텔리제이에서 프로젝트를 새롭게 만들자. 그리고 패키지를 생성해 준다.

controller라는 이름으로 나는 package를 생성해 줬다.

 

 

그리고 PostApiController라는 Class도 추가해 준다. 그리고 @RestController와 @RequestMapping을 붙여준다. 그 결과는 아래와 같다.

 

 

아래의 Map 작성 시 빨강으로 코드 색이 뜬다면 import가 안되서 그런 것이다. import를 위해서 커서를 Map에 두고 alt+enter를 처주면 자동을 import가 된다.

forEach()의 괄호 안에 커서를 두고 ctrl+space를 누르면 자동으로 만들어 주는 메서드가 있다.

 

 

위의 코드에서 forEach가 블록처리 되어 있는 것을 확인 할 수 있다. 커서를 가까기 가보면 관련 설명이 나오는 것을 알 수 있다. 인텔리J에서 추천해 주는 설명으로 변경하려면 forEach에 커서를 두고 alt+enter를 치면 아래와 같이 코드가 바뀌는 것을 알 수 있다. 무엇을 쓰든 상관 없다.

 

 

이제 API Tester나 POSTman 등 과 같은 프로그램을 실행해 보자. 여기서는 API Tester를 사용할 것이다.

 

 

위의 Headers 부분을 보면 application/json부분은 기본적으로 UTF-8이다. 과거에는

application.json;charset=utf-8 이런 식으로 캐릭터셋을 지정해 주었지만 지금은 그럴 필요가 없다.

 

이때 바로 send를 보내면, 실행이 안된다. 아래와 같이 @RequestBody를 붙여줘야한다.

 

 

 

 

이런식으로 JSON을 보내주면 된다. 그러면 print한 부분이 잘 나타나는 것을 알 수 있다.

 

 

실제 위와 같이 코딩을 하기는 애매하다. 왜냐하면 어떤 값을 받는지를 알아야하는데, Map으로 받기는 애매하다. DTO로 작성해 보자

 


 

Package를 dto로 만든다.

class는 PostRequestDto로 만든다.

롬복은 일단 pass한다. 그리고 아래와 같이 작성을 해준다.

 

 

위에서 적은 값들은 JSON의 key에 해당하는 값들을 적어줘야한다. 자바에서는 CamelCase로 작성하는데, JSON으로는 snake_case로 오는 경우도 있다. 이런경우도 아래에서 확인해 보자.

상단 bar에서 Code의 generate를 눌러주고 Getter and Setter를 눌러준다. 그 후에 나오는 변수를 shift로 다 선택을 해준다. 그러면 get, set method가 직접 만들어 진다. 이제 다시 PostApiController.java에 가서 만든 class를 받아보자.

 

 

 

 

 

이렇게 적어주고 tostring으로 찍어주기 위해서 다시 PostRequestDto.java에 가서 tos하고 뜨는 것을 엔터쳐서 다 선택해서 확인을 눌러준다. 그러면 아래와 같이 자동완성을 해준다.

 

 

 

 

위와 같이 완성을 시켜준다.

 

 

이러한 방식으로 보내주면, 아래와 같이 PostRequestDto가 보여진다.

 

 

 

 

이러한 결과값이 출력되는 것을 확인 할 수 있다. 

 

requestData.getAccount()

 

특정 변수를 가져오려면 위와 같은 방식으로 하면된다. 위는 account를 가져온 방식이다.

 

 

 

자바에서는 CamelCase로 작성하는데, JSON으로는 snake_case로 오는 경우도 있다.

아래와 같이 phoneNumber를 추가해 주자. 그리고 Code-generate를 눌러서 getter and setter를 추가해준다.

 

 

그리고 아래 그림처럼 phnoeNumber를 tos를 쳐서 추가해 준다.

 

 

 

 

 

 

 

그리고 폰 넘버를 JSON으로 만들어준다

 

 

이렇게만 하면 안된다.

 

phone_number가 snakecase라서 못찾는다. 우리는 JsonProperty라는 어노테이션으로 만들어 준다. 아래의 예를 보면 phone_number로 들어온다고 지정을 해준 것이다. (이렇게 굳이 해주는 이유는 자바는 camelCase를 따르기 때문이다.)

 

 

 

 

 

개발을 하다보면, 카멜케이스도 아니고 스네이크케이스도 아닌 경우가있다. 아래와 같은 약어의 경우가 그러한 경우이다.

 

private String OTP;

 

이러한 것들을 mapping하기 위해서 JsonProperty가 존재하는 것이다.

 

아래와 같이 코드를 변경해 준다.

 

.
.
.

    @JsonProperty("OTP")
    private String OTP;

    public String getOTP() {
        return OTP;
    }

.
.
.


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

 

 

그리고 보내는 Json도 아래와 같이 변경해 준다.

 

 

 

이렇게 하면 위와 같이 결과 값이 잘 오는 것을 알 수 있다.

 

정리하면, 특정변수에 Json의 key 값을 할당해 준것이다. 이 외에서 Json자체를 camelCase로 통채로 바꾸는 방법이나, spring 어플리케이션을 활용한 방법도 있다.

반응형

'Platform > spring boot' 카테고리의 다른 글

[spring boot] Object Mapper  (0) 2021.06.21
[intellij] OpenJDK 64-Bit Server VM warning  (0) 2021.06.20
[sping boot] response 방법  (1) 2021.06.19
[spring boot] PUT API 방식  (0) 2021.06.15
[spring boot] 8080 포트 변경  (0) 2021.06.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함