Spring

[spring] @RequestBody @ResquestParam 등 정리

우주유령 2022. 10. 31. 08:51
728x90
반응형

클라이언트의 content type과 controller의 parameter나 response type이 안맞으면 404, 415, 400, 500 등 오류가 난다. 이런 오류는 잡기 어려우므로, 관련 지식을 다시한번 정리해보자.

 

VO

  • parameter에 VO가 온다. 아무 어노테이션이 붙지 않아도 jackson이 getter setter를 이용하여 VO에 값을 매핑해준다. 반면, 아무 어노테이션 없이 HashMap으로 받으려고 하면 오류가난다. VO와 다르게 getter setter가 없기 때문이다.

 

@RequestBody

body에 있는 내용을 꺼내준다. 클라이언트의 Contet-Type 에 알맞은 HttpMessageConverter가 선택되어 java객체로 변환시켜준다.

  • body에 데이터를 넣는 방식이 아닌데, (예를 들어 쿼리 스트링 등) @RequestBody 를 사용하면 에러가 난다.

 

@RequestParam

  • query parameter, formdata, multpart 인 request의 내용을 꺼내준다.
  • spring webfulx에서는 query parameter만 받을 수 있다.

 

@ResponseBody

HTTP body에 문자 내용을 직접 반환한다.
HttpMessageConverter가 동작한다.

  • StringHttpMessaveConverter(기본 문자 처리)
  • MappingJackson2HttpMessageConverter(기본 객체 처리) 등이 있다.

클라이언트의 HTTP Accept헤더와 Controller의 return type정보 두가지를 조합하여 HttpMessageConverter가 선택된다.



@ResponseBody 없이 String을 return하면 viewResolver 가 동작한다. 이때 spring에 설정되어있는 prefix와 surfix가 붙어서 경로가 만들어진다. (default로 설정되어있거나, boot의 경우 application.properties에서 설정한다.) 해당 경로에 있는 파일을 return하고, 파일이 없을 경우에는 404에러가 뜬다.

  • fetch로 get요청을 보냈을때, 데이터가 return 될 뿐 redirect되지는 않는다.
  • url에서 직접 get요청을 보내면, return된 데이터가 화면에 나타난다.
728x90
반응형