Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SQL
  • 우아한테크코스
  • 레포지토리
  • 에라토스테네스의 체
  • ec2
  • elasticsearch
  • spring
  • rsocket
  • Wil
  • Android
  • Docker
  • enum
  • 코틀린
  • webflux
  • 안드로이드
  • 프로그래머스
  • 프리코스
  • java
  • 코틀린 인 액션
  • 파이썬
  • til
  • kibana
  • MariaDB
  • 백준
  • 내림차순
  • kotlin
  • grafana
  • 문자열
  • 다이나믹 프로그래밍
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

[TIL - 20230415]
TIL

[TIL - 20230415]

2023. 4. 15. 15:27

 

💻문제점

어제 PostController의 update 메서드에서 요청 메시지 바디의 객체를 가져오려고 @ReqeustBody 애노테이션을 사용했는데, 오류가 발생했었다.

//게시글 수정
@PutMapping("/update/{id}")
@ResponseBody
public PostResponseDTO update(@PathVariable Long id, @RequestBody PostRequestDTO reqDTO) {
    return postService.updatePost(id, reqDTO);
}


📃시도

에러 메시지를 보아하니 Content-Type이 지원이 안된다는 것 같아 @RequestBody를 지우는 선택을 했다. 해결은 됐는데 찜찜한 기분


🔍해결

알고보니 PostMan에서 바디에 요청을 x-www.form.urlencoded로 작성해서였다. 

x-www.form.urlencoded는 html form submit에서 사용하는 건데, 나는 header에 Content-type을 application/json으로 설정해서 매핑이 안되는거였다. 그냥 바디에 데이터만 넣으면 되는줄 알았는데 막 넣으면 안되는 거였군...!

나는 json 타입으로 보내야해서 body를 raw > JSON으로 작성하여 요청 메시지를 보내도록 했다.


🤦‍♀️의문점

왜 단순히 html을 반환할 때 @Controller를 쓰고 언제는 @RestController를 쓰지? 뭐가 다른걸까


💡알게 된 점

@Controller와 @RestController

@Controller는 주로 View를 반환하기 위해 사용한다. Controller가 Viewname을 반환하면 ViewResolver가 해당 View를 찾아 렌더링 한다.

Data를 반환하기 위해서는 @ResponseBody 애노테이션을 활용하여 이를 통해 Json 형태로 데이터를 반환할 수 있다. 컨트롤러를 통해 객체를 반환할 때는 보통 ResponseEntity로 감싸서 반환한다. 그리고 ViewResolver가 아닌 HttpMessageConverter가 작동한다.

Controller에서 데이터를 반환하는 메서드에 @ResponseBody 애노테이션을 작성해주어야 하는데, 해당 컨트롤러의 모든 메서드가 데이터를 반환하여 @ResponseBody를 붙여야 한다면 @RestController를 사용하면 된다.

@RestController는 @Controller에 @ResponseBody가 추가된 것이다. 주용도는 Json형태로 객체 데이터를 반환하는 것이다. 

728x90

'TIL' 카테고리의 다른 글

[TIL - 20230419] JWT  (0) 2023.04.19
[TIL - 20230418] JWT  (0) 2023.04.18
[TIL - 20230414] 블로그 과제  (0) 2023.04.15
[TIL - 20230413] 세션  (0) 2023.04.13
[TIL - 20230411] yml의 DB 정보 .gitignore 등록  (0) 2023.04.11
    'TIL' 카테고리의 다른 글
    • [TIL - 20230419] JWT
    • [TIL - 20230418] JWT
    • [TIL - 20230414] 블로그 과제
    • [TIL - 20230413] 세션
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바