본문 바로가기
Java

java - POST API

by sinabeuro 2021. 8. 26.
728x90

@RequestBody vs @RequestParam

@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("/post2")
public void post2(@RequestBody PostRequestDto requestData) {
	System.out.println(requestData);
}

post api는 get api와는 다르게 @RequestBody 어노테이션을 사용하여 body로 보내진 JSON 데이터를 읽습니다.

@RequestBody 어노테이션은 dto로 받은 파라미터뿐만 아니라 다른 데이터 타입에도 기술해야합니다.

cf) get api는 @RequestParam 어노테이션을 사용합니다.

 

 

 

@PathVariable

get api의 @Pathvariable과 마찬가지로 동일한 방식으로 사용하면 됩니다.

가변 변수를 사용하고 싶은 경우 URI에 가변 변수명을 선언하고 api 메소드 인자에서 @Pathvariable 어노테이션을 붙여서 사용하면됩니다.

자세한 내용은 get api의 @Pathvariable 참조

https://getthismoment.tistory.com/64

 

 

 

@JsonProperty

// PostRequestDto.java
public class PostRequestDto {

    private String account;
    private String email;
    private String address;
    private String password;

    @JsonProperty("phone_number")
    private String phoneNumber;
	
    ...
}

스프링부트는 디폴트로 카멜 케이스로 파라미터를 읽습니다.

phone_number와 같이 스네이크 케이스로 파라미터를 보낼 경우 null로 인식됩니다.

카멜 케이스 이외의 형식으로 파라미터를 보내고 싶거나 특정 문자로 파라미터를 읽고 싶은 경우에 @JsonProperty 어노테이션을 사용하면 됩니다.

 

 

 

@JsonNaming

@JsonProperty 어노테이션처럼 속성에 하나하나 파라미터를 어떻게 받을지를 지정할 수 있지만,

DTO클래스 전체어 어떤 파라미터를 받을지 지정할 수 있습니다.

// PostRequestDto.java
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class PostRequestDto {

    private String account;
    private String email;
    private String address;
    private String password;
    private String phoneNumber;
	
    ...
}

DTO클래스 위에 @JsonNaming 에노테이션을 기술하고 name 속성을 지정하면 됩니다.

value = PropertyNamingStrategy.SnakeCaseStrategy.class는 모든 속성에 스네이크 케이스를 허용하겠다는 설정입니다.

@JsonProperty 어노테이션과 비교하면, @JsonProperty은 특수한 목적으로 특정 속성만 파라미터를 어떻게 받을 것인지 설정할 수 있습니다. 

반면 @JsonNaming 에노테이션은 클래스 안에 있는 속성 전부가 어떤 파라미터를 받을 것인지 설정할 수 있습니다.

728x90

'Java' 카테고리의 다른 글

java - ObjectMapper  (0) 2021.08.29
java - PUT API  (0) 2021.08.26
java - GET API  (0) 2021.08.26
java - api 프로젝트 만들기  (0) 2021.08.25
java - 전략 패턴(행위 패턴)  (0) 2021.08.24

댓글