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

@RequestBody

@RequestBodyJSON 형태의 데이터를 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": "내용입니다."}

 

아래와 같이 titlecontentsnull이 들어간다. 즉, 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 개발)

 

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

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

memostack.tistory.com

 

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

memostack

@bluemiv_mm

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