Home Spring Boot Put, Post Example
Post
Cancel

Spring Boot Put, Post Example

JSON

  • ’{}’로 시작하며 Key Value쌍으로 데이터를 작성한다.
  • 지원 Type
    • String : value
    • number : value
    • boolean : value
    • object : value { }
    • array : value [ ]
  • JSON에서는 snakecase를 더 많이 사용한다. → 하지만 두 가지 다 파싱 및 제공이 가능해야한다.
  • ex
1
2
3
4
5
6
7
8
9
{
	"phone_number" : "010-4459-4995",
	"age" : 10,
	"isAgree" : false,
	"account" : {
			"email" : "kmslkh@naver.com",
			"password" : "1234"
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
//user 조회
{
	"user_list" : [
		{
			"account" : "abcd",
			"password" : "1234"
		},
		{
			"account" : "bbbb",
			"password" : "1234"
		},
	]
}

POST

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
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);
        });
    }

    @PostMapping("post1")
    public void post1(@RequestBody PostRequestDto postRequestDto){
        System.out.println(postRequestDto.toString());
    }
}
  • RequestBody Annotation을 사용한다.
  • DTO의 경우 각 멤버 변수 명이 JSON Key와 같아야하는데 JAVA에서는 camelCase로 작성되는데 JSON에서는 snake_case로 전송될 수 있다.
  • 다양한 해결 방법이 존재 한다.
    • JsonProperty로 다른 Case를 매칭 시킬 수 있다.

      1
      2
      
        @JsonProperty("phone_number")
        private String phoneNumber;
      

PUT

  • POST와 거의 유사하다.

CarDto

1
2
3
4
5
6
7
8
9
10
@Setter
@Getter
@ToString
public class CarDto {

    private String name;

    @JsonProperty("car_number")
    private String carNumber;
}

PutRequestDto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
...

@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
@Setter
@Getter
@ToString
public class PutRequestDto {

    private String name;
    private int age;
    private List<CarDto> carList;
}

PutApiController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.example.put.controller;

import com.example.put.dto.PutRequestDto;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    @PutMapping("/put")
    public PutRequestDto put(@RequestBody PutRequestDto putRequestDto){
        System.out.println(putRequestDto.toString());
				return putRequestDto;
    }
}

PUT1

PUT2

PUT3

  • camelCase, snake_case의 mapping은 JsonProperty를 사용해 변수별로 지정할 수 도 있고, JsonNaming을 사용해 Class단위로 지정할 수 도 있다.
  • Sprint Boot RestController에서는 object를 return할 때 설정 한 JsonNaming, JsonProperty의 룰에 따라 JSON으로 변경되어 Response가 전송된다.
This post is licensed under CC BY 4.0 by the author.