김영한님 인강듣고/스프링 MVC

RequestMappingHandlerAdapter, HandlerMethodArgumentResolver, HandlerMethodReturnValueHandler, HttpMessageConverter

doriver 2024. 6. 5. 15:13

RequestMappingHandlerAdapter( 요청 매핑 헨들러 어뎁터 )

애노테이션 기반 컨트롤러의 @RequestMapping을 처리하는 핸들러 어댑터

HandlerMethodArgumentResolver

RequestMappingHandlerAdapter가 HandlerMethodArgumentResolver를 호출

ArgumentResolver를 통해서 컨트롤러가 필요로 하는 다양한 파라미터의 값을 생성한다. 

( HttpServletRequest , Model , @RequestParam , @ModelAttribute , @RequestBody , HttpEntity 등등 )

 

파리미터의 값이 모두 준비되면 컨트롤러를 호출하면서 값을 넘겨준다.

스프링은 30개가 넘는 ArgumentResolver 를 기본으로 제공
HandlerMethodArgumentResolver를 확장해서 컨트롤러로 넘어가는 파라미터를 직접 만들수도 있다.

 

HandlerMethodReturnValueHandler

ArgumentResolver 와 비슷, 이것은 응답 값을 변환하고 처리
스프링은 10여개가 넘는 ReturnValueHandler 를 지원한다.  예) ModelAndView , @ResponseBody , HttpEntity , String

HttpMessageConverter

다음의 경우에 HTTP메시지컨버터 가 적용됨( JSON등 데이터를 HTTP메시지 바디에서 직접 읽거나 쓰는 경우 )
HTTP 요청 - @RequestBody , HttpEntity(RequestEntity)
HTTP 응답 - @ResponseBody , HttpEntity(ResponseEntity) 

 

응답에서 HttpMessageConverter가 사용될 경우 viewResolver 동작 안함

 

이쪽 마저 정리해야함

 

StringHttpMessageConverter

content-type : application/json  이고

@RequestMapping
void hello (@RequestBody String data) {}

 

 

MappingJackson2HttpMessageConverter

content-type : application/json  이고

@RequestMapping
void hello (@RequestBody HelloData data) {}

 

HTTP메시지

요청, 응답 메시지로 나뉜다.

시작라인, header, 공백라인, message body로 구성됨.

header - HTTP전송에 필요한 모든 부가정보가 담김

 예) 메시지 바디 내용의 타입( content-type ), 메시지 바디의 크기( content-length ), 인증

, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보...

message body - 실제 전송할 데이터가 담김 

예) HTML 문서, JSON 등 byte로 표현할 수 있는 모든 데이터