Get요청 처럼
아래와 같이 @PostMapping을 사용하면, Post요청을 보낼 수 있고, 받을때도 Map 혹은 Dto로 받는것이 가능하다.
한가지 다른점
Get요청에서 사용한 @RequestParam과 다른 @Requestbody 라는 어노테이션이 보인다.
어노테이션 문서를 확인해보자!
메소드 매개변수를 나타내는 어노테이션은 웹 요청의 본문에 바인딩되어야 합니다. requestbody는 요청의 콘텐츠 유형에 따라 메서드 인수를 확인하기 위해 HttpMessageConverter를 통해 전달됩니다. 선택적으로 @Valid로 인수에 어노테이션을 추가하여 자동 유효성 검사를 적용할 수 있습니다.
HttpMessageConverter의 역할은 HTTP 메시지 바디의 내용을 객체로 변환하거나 객체를 HTTP 메시지
바디에 입력하는 것이다.
요약하면 reqeuestbody에 데이터를 담아서 보내면 Converter가 자바 객체로 변환 해주고 @Vaild 를 사용하면 유효성 검사도 할 수 있다는 말인거 같다.
자바에서는 변수명을 카멜케이스로 많이 만든다.
요청 Json에서 phone_number 처럼 스네이크 케이스로 되어있을경우
HttpMessageConverter에서 자바 객체에 제대로 바인딩 할 수 없어 null값이 들어간다.
해당 Dto의 필드 부분에 아래와 같이 지정해 주면 스네이크 케이스로 요청을 보내도 객체 필드에 정상 바인딩 된다!
유효성 검사도 되는지 확인하기 위해 email 필드에 검증 어노테이션인 @Email을 붙여놓았고,
요청 json을 보면 email 형식을 검증하기위해 일부러 바꿔서 요청을 보냈다.
400에러와 로그를 살펴보면 @Vaild가 잘 동작 하는것을 확인 할 수 있다.