[Spring] @RequestBody vs @RequestParam vs @ModelAttribute

컴투루·2023년 1월 19일
0

🌱 @RequestBody & @ResponseBody

웹에서 이루어지는 데이터 통신은 클라이언트와 서버간에 이루어지고 이때 중요한 것이 요청(Request)와 응답(Response)입니다.
비동기 통신을 위해서는 요청메시지와 응답메시지를 Body에 담아 보내야하는데 데이터의 형식은 JSON으로 설정합니다.

이때 @RequestBody와 @ResponseBody를 사용합니다.

HttpServleRequest를 이용해 데이터를 가져오면 굳이 @RequestBody가 필요하지 않지만 VO, DTO를 사용해 데이터를 받기위해서는 사용해야 합니다.

🎈 @RequestBody
	클라이언트 >> 서버
	데이터를 전송할 때 JSON형태로 데이터를 만들어 요청하면 서버에서는 @RequestBody를 이용해 
    HTTP요청 body에 담김 값들을 자바 객체로 변환시켜 객체에 저장시킨다.

🎈 @ResponseBody
	서버 >> 클라이언트
	@ResponseBody를 이용해 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송한다.

값을 주입하지 않고 변환 시키므로 변수들의 생성자, Getter, Setter가 없어도 정상적으로 할당됩니다.


🌱 @RequestParam

🎈 1개의 HTTP 요청 파라미터를 받기 위해 사용

필수여부가 True여서 기본적으로 반드시 해당 파라미터가 전송되어하는데 전송되지 않으면 400 Error를 유발할 수 있습니다.
반드시 필요한 변수가 아니라면 required값을 false로 설정해주어야합니다.


🌱 @ModelAttribute

🎈 HTTP Body내용과 HTTP파라미터의 값들을 생성자, Getter, Setter를 통해 주입하기 위해 사용

값 변환이 아닌 값을 주입시키므로 변수들의 생성자나 Getter, Setter가 없으면 저장되지 않습니다.

✅ ajax요청을 @ModelAttribute에서 처리?

@ModelAttribute는 파라미터 기반의 요청을 처리하므로 데이터를 파라미터로 넘겨주면 ajax요청도 @ModelAttribute로 받을 수 있습니다.

get방식처럼 url에 데이터를 넣어 전달하게 되는데 좋지 않은 방법입니다.

따라서 ajax요청을 @ModelAttribute로 처리하기 위해서는 FormData를 사용하고 ajax를 통해 file 업로드를 처리할 때는 FormData를 통해 처리하고 서버는 @ModelAttribute로 받아야합니다.


🌳 이렇게 기억하자!

@RequestBody@RequestParam@ModelAttribute
주입이 아닌 변환변환이 아닌 주입
생성자, Getter, Setter없어도 정상적으로 할당없으면 변수 저장 X
역할JSON형태를 Java Object로 변환1개의 HTTP요청 파라미터HTTP Body와 HTTP 파라미터 값들을 주입

📒참고

@RequestBody와 @ResponseBody란?
@ModelAttribute vs @RequestBody

profile
맘 먹으면 못할 게 없지

0개의 댓글