블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
@RequestBody
@RequestBody
는 JSON
형태의 데이터를 Java
객체에 매핑할때 사용하는 어노테이션이다.
예를 들어 아래와 같이 '공지 사항'과 관련된 글쓰기 API를 만들었다고 했을때,
- 비즈니스 로직은 생략 (입력받은 값 그대로 반환하도록 함)
NoticeVo.java
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NoticeVo {
private int id; // ID
private String title; // 제목
private String contents; // 컨텐츠
private LocalDateTime registeredAt; // 등록일
}
ApiNoticeController.java
@RestController
@RequestMapping("api/v1/notice")
public class ApiNoticeController {
@PostMapping({"", "/"})
public NoticeVo addNotice(NoticeVo noticeVo) {
// 비즈니스 로직 생략
noticeVo.setId(1);
noticeVo.setRegisteredAt(LocalDateTime.now());
return noticeVo;
}
}
위와 같은 API를 JSON 데이터와 함께 호출해보면
POST http://localhost:8080/api/v1/notice
Content-Type: application/json
{"title": "제목","contents": "내용입니다."}
아래와 같이 title
과 contents
에 null
이 들어간다. 즉, Client가 던져준 데이터를 매핑하지 못한다.
{
"id": 1,
"title": null,
"contents": null,
"registeredAt": "2021-05-17T21:38:32.841"
}
Java 객체에 매핑
HTTP 요청과 함께 받은 JSON 데이터를 Java 객체에 매핑하기 위해, @RequestBody
를 사용한다.
- Argument 앞에 @RequestBody를 추가
@PostMapping({"", "/"})
public NoticeVo addNotice(@RequestBody NoticeVo noticeVo) { // Java 객체에 매핑
noticeVo.setId(1);
noticeVo.setRegisteredAt(LocalDateTime.now());
return noticeVo;
}
다시 한번 request를 보내보면, 아래와 같이 정상적으로 Client가 던진 데이터를 제대로 매핑하여 받는다.
{
"id": 1,
"title": "제목",
"contents": "내용입니다.",
"registeredAt": "2021-05-17T21:41:30.259"
}
관련 글
2021.05.17 - [Spring] - @ResponseBody를 이용하여 데이터 반환 (API 개발)
반응형
'Backend > Spring Boot' 카테고리의 다른 글
Spring @RestController 를 이용하여 REST API 개발 (0) | 2021.05.17 |
---|---|
JPA Fetch 종류 (LAZY Fetch와 EAGER Fetch) (0) | 2021.03.27 |
Spring Boot에서 AOP 구현 (Aspect Oriented Programming) (0) | 2021.03.11 |
Spring Boot 에서 JWT 적용 (Maven 환경) (0) | 2021.01.21 |
SpringBoot, Junit5에서 REST API(Controller) 테스트 (0) | 2021.01.15 |