• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@ResponseBody 사용할 때 객체에 getter가 없을 경우

21.12.02 04:07 작성 조회수 851

0

안녕하십니까 

혼자 실습하는 중에  궁금한 점이 생겨 질문드립니다.

본 강의에서 @ResponseBody는 객체를 받아서 HTTP 메시지 컨버터를 통해 JSON 응답을 하는 것으로 배웠습니다.

그래서 저는 UserDto라는 객체를 만들어 반환하려고 합니다. 

 

해당 컨트롤러에는 @RestController가 있고, UserDto에는 @Builder 뿐입니다.

이 결과 406 not acceptable 을 받게 되었습니다.

하지만 UserDto에 @Getter를 한 뒤 다시 실행해보니 JSON이 잘 나왔습니다. 

여기서 왜 @Getter가 없으면 제대로 반환이 안될까라는 생각이 들었습니다.

 메시지 컨버터에서  "email " : [aaaa] 을 만들어주기 위해 
UserDto에서 userDto.getEmail() 이 동작해야 aaaa를 뽑아올 수 있기 떄문인가요?

그래서 getXXX가 없으면 객체 자체를 반환? 하기 떄문에 not acceptable이 나온거구요!

제 생각이 맞는지 여쭤보고 싶습니다.

감사합니다

답변 2

·

답변을 작성해보세요.

1

gusdn85554님의 프로필

gusdn85554

질문자

2021.12.02

안녕하세요 OMG님

비전공자로 선생님이 구글과 인프런 서포터즈 분들이나 강사님 뿐인데 항상 친절하시고 명쾌한 답변 감사드립니다.

이틀동안 구글에 써칭하다가 답이 나오질 않아, 기초로 돌아가자라는 생각이 들어 해당 부분 강의를 다시 들어본 것이 운이 좋았던 것 같습니다.

답변에 의해서 복잡한 것들이 한 번에 해결됐습니다. 정말 감사합니다!

 

0

OMG님의 프로필

OMG

2021.12.02

안녕하세요. gusdn85554님, 공식 서포터즈 OMG입니다.

네 맞습니다.

Spring에서 Content-Type에 선언된 형식으로 변환이 불가능 할 경우 406에러가 발생하며, 어떤 요청을 받았는지 또는 어떤 응답을 보내야하는지에 따라 사용하는 HttpMessageConverter가 달라지는데 

JSON 요청이고 JSON 본문이 들어올 경우(Content-type이 JSON) JsonMessageConverter가 사용되서 요청 JSON 메세지를 User 객체로 변경하며 이 때 자바 빈 규약에 따른 프로퍼티 바인딩 (Getter/Setter)가 발생하며 Getter를 생략하였기 때문에 406에러 가 발생한 것입니다.

문제 발생 상황을 파악하고 접근하는 방식이 좋으시네요 ^^

열심히 학습하시는 것 같아 보기 좋습니다 ㅎㅎ

 

참고)

406 Not Acceptable in Spring | Joddev’s blog


감사합니다.

gusdn85554님의 프로필

gusdn85554

질문자

2021.12.02

정리하다가 궁금한 점이 생겨 질문드립니다..!

 

JSON 요청이고 JSON 본문이 들어올 경우(Content-type이 JSON) JsonMessageConverter가 사용되서 요청 JSON 메세지를 User 객체로 변경하며

 

이 부분에서 

JsonMessageConverter가 userDto를 응답 JSON 메세지 로 바인딩하는 과정에서 getter 가 필요하다라고 이해하면 될까요??

OMG님의 프로필

OMG

2021.12.02

네 맞습니다. json으로 응답 만들어줄 때 userDto의 getter로 값을 가져옵니다.

gusdn85554님의 프로필

gusdn85554

질문자

2021.12.03

감사합니다!