- @RequestParam, @RequestBody, @ResponseBody2024년 11월 12일
- chantleman
- 작성자
- 2024.11.12.:09
@RequestParam과 마찬가지로 요청 파라미터를 객체로 바인딩하기 위해 사용하지만
@RequestParam은 URL에 요청 파라미터를 바인딩하는 반면,
@RequestBody : 클라이언트가 서버로 전송하는 HTTP 요청의 Body 내용을 직접 조회(Json 데이터 조회)해서 body안의 내용을 자바 객체로 반환 (컨트롤러가 아니면 ObjectMapper로 변환)
json으로 보냈으면 post 방식, @RequestBody로 받아야함
ajax → json → http 메시지 converter → 객체
@Requestparam는 form태그, model로 넘어올 때 사용하고,
ajax로 할 때는 @RequestBody 사용하는데,
ajax get 요청할 때는 @RequestBody을 사용하게 되면 에러가 난당!!
이유는 get은 요청 파라미터로 전달되기때문에 @RequestParam으로 받아야된당
post, put, patch, delete일때는 @RequestBody사용
그럼 form 태그로 요청해도 post 메소드로 요청하면 RequestBody로 받을 수 있는 거 아닌강?
할 수 있당!
하지만 form태그는 기본적으로 application/x-www-form-urlencoded(form태그의 기본형식으로 폼 필드와 값을 URL-encoded 방식으로 전송 ) 또는 multipart/form-data( 파일 업로드 시 사용하는 형식 ) 형식으로 데이터를 전송하는데
이런 방식으로 데이터를 전송할 경우, 서버에서는 일반적으로 @RequestParam을 사용하여 쿼리 파라미터나 폼 데이터를 처리함
결론적으로 form태그는 기본적으로 application/x-www-form-urlencoded 방식으로 전송되므로, 서버에서는 @RequestParam을 사용하여 데이터를 받음
@RequestBody는 주로 JSON이나 XML 형식의 데이터를 받을 때 사용
그래서 ajax로 json 형식의 데이터를 보낼때는 조회여도 post와 RequestBody 사용
data: {
keyword: keyword,
currentPage:currentPage
}, ← 이런식으로 보내는 건 폼데이터나 쿼리 파라미터로 보내는 것과 같아서 POST로 해도 requestParam으로 받거나 어노테이션을 쓰지 않는다.
하지만 반대로 json 형식으로 보내게 될 경우 get 요청을 할 수 없음
get 요청은 url의 쿼리 스트링에 데이터를 포함하는 방식으로 사용(body에 데이터 담는 방식 x)되므로
json/xml은 JSON.stringify()를 통해 body에 담기 때문에 get 요청할 수 없음
파라미터에 파일이 포함되어있지 않으면 @RequestBody를 사용해서 json을 java객체로 바꾼당 (deserialize)
( requestBody는 json만 처리하기 때문에 첨부파일이 있을때는 jackson이 해결해주지 않고 multipart parser를 가지고 있는 스프링이 직접 해결해줌)
(@ResponseBody는 DB에서 전달받은 데이터를 json으로 바꿔줌. serialize)
파일이 포함돼있으면 @RequestPart 사용 ( formdata가 넘어올때만 사용 )
@RestController => @Controller + @ResponseBody
모든 메소드에 @ResponseBody를 다 사용해야할 때만 @RestController를 사용할 수 있당!
클에서 obj -> str : JSON.stringify
자바에서 str->obj
서버에서 obj->str : ResponseBody 어노테이션 사용
스크립트에서 str-> obj
json/xml 등의 형식의 데이터를 주고 받는 것이 rest api
responsebody를 사용해야 json형식으로 응답할 수 있음
대신 클라이언트 ajax에서 data-type을 json으로 해야 responsebody가 json으로 변환할 수 있음728x90'spring' 카테고리의 다른 글
react, spring boot 연동 (0) 2024.11.26 websocket (0) 2024.11.18 파일업로드 (0) 2024.11.14 spring 설치 및 초기 설정 (3) 2024.11.08 h2 DB (0) 2024.10.24 다음글이전글이전 글이 없습니다.댓글