memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

1. @RequestBody

@RequestBodyJSON 형태의 데이터를 Java 객체에 매핑할때 사용하는 어노테이션이다.

 

예를 들어 아래와 같이 '공지 사항'과 관련된 글쓰기 API를 만들었다고 했을때,

  • 비즈니스 로직은 생략 (입력받은 값 그대로 반환하도록 함)

 

NoticeVo.java

<java />
@Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor public class NoticeVo { private int id; // ID private String title; // 제목 private String contents; // 컨텐츠 private LocalDateTime registeredAt; // 등록일 }

 

ApiNoticeController.java

<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 데이터와 함께 호출해보면

<java />
POST http://localhost:8080/api/v1/notice Content-Type: application/json {"title": "제목","contents": "내용입니다."}

 

아래와 같이 titlecontentsnull이 들어간다. 즉, Client가 던져준 데이터를 매핑하지 못한다.

<java />
{ "id": 1, "title": null, "contents": null, "registeredAt": "2021-05-17T21:38:32.841" }

 

1.1. Java 객체에 매핑

HTTP 요청과 함께 받은 JSON 데이터를 Java 객체에 매핑하기 위해, @RequestBody를 사용한다.

  • Argument 앞에 @RequestBody를 추가
<java />
@PostMapping({"", "/"}) public NoticeVo addNotice(@RequestBody NoticeVo noticeVo) { // Java 객체에 매핑 noticeVo.setId(1); noticeVo.setRegisteredAt(LocalDateTime.now()); return noticeVo; }

 

다시 한번 request를 보내보면, 아래와 같이 정상적으로 Client가 던진 데이터를 제대로 매핑하여 받는다.

<java />
{ "id": 1, "title": "제목", "contents": "내용입니다.", "registeredAt": "2021-05-17T21:41:30.259" }

 

 

2. 관련 글

2021.05.17 - [Spring] - @ResponseBody를 이용하여 데이터 반환 (API 개발)

 

@ResponseBody를 이용하여 데이터 반환

보통은 @Controller 어노테이션을 이용하여 Controller 를 생성했을때, (ViewResolver에 의해) return 값으로 반환하는 문자열 이름의 view 페이지를 띄어준다. (아래 예시 코드 참고) 더보기 HelloCotroller.java..

memostack.tistory.com

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!