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
반응형
'Spring' 카테고리의 다른 글
[spring] form데이터 @RequestPart vs @RequestParam (2) | 2023.07.20 |
---|---|
[spring] spring scheduler vs quartz scheduler (0) | 2023.06.29 |
[spring] (1) springboot, mysql, mybatis 연결, DB에서 데이터가져오기 (5) | 2022.10.20 |
Eclipse로 war 파일 만들기 (0) | 2022.05.02 |
[SpringBoot] spring-boot-devtools 사용하기 (0) | 2022.03.09 |