@RequestBody와 @ResponseBody
- 스프링에서 비동기 처리를 하는 경우, @RequestBody, @ResponseBody를 사용
- 클라이언트에서 서버로 통신하는 메시지를 요청(request) 메시지, 서버에서 클라이언트로 통신하는 메시지를 응답(response) 메시지 라고 함
- 웹에서 화면전환(새로고침) 없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어짐
- 비동기 통신을 하기 위해서는?
클라이언트에서 서버로 요청 메세지를 보낼 때 → 본문에 데이터를 담아서 보내기
서버에서 클라이언트로 응답을 보낼 때 → 본문에 데이터를 담아서 보내기
** 여기서 본문이 바로 body!
** 즉 요청 본문 requestBody, 응답본문 responseBody를 담아서 보내야 함
** 본문에 담기는 데이터 형식은 여러가지 형태가 있지만 가장 대표적으로 사용되는 것이 JSON
** 비동기식 클라이언트-서버 통신을 위해 JSON 형식의 데이터를 주고받는 것
+ JSON이란?
https://summer-record.tistory.com/130
JAVA | JSON vs Ajax
JSON(Javascript Object Notation) 데이터 구조 형식 자바스크립트의 객체(Object)처럼 Key와 Value가 쌍으로 묶여있는 표기법(문법) 포맷이 XML, Plaint Text, JSON이 있으며 예전에는 주로 XML을 사용했으나 사..
summer-record.tistory.com
@RequestBody
- 이 어노테이션이 붙은 파라미터에는 http 요청의 본문(body)이 그대로 전달됨
- 일반적인 GET/POST의 요청 파라미터라면 사용할 일이 없을 것이나, xml이나 JSON 기반의 메시지를 사용하는 요청의 경우에 이 방법이 유용함
- HTTP 요청의 본문(body) 내용을 통째로 자바 객체로 변환 → 매핑된 메소드 파라미터로 전달함
@ResponseBody
- 자바 객체를 HTTP 요청의 바디 내용으로 매핑하여 클라이언트로 전송
- @ResponseBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어 타입과 파라미터의 타입을 먼저 확인할 것
- @ResponseBody 어노테이션을 사용하면 HTTP 요청 body를 자바 객체로 전달받을 수 있음
@RestController
- @Controller와는 다르게 @RestController는 리턴값에 자동으로 @ResponseBody가 붙게되어 별도 어노테이션을 명시해주지 않아도 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달됨
- @Controller인 경우에 본문(body)을 자바 객체로 받기 위해서는 @ResponseBody 어노테이션을 반드시 명시해주어야 함
@RequestParam
- 요청 파라미터를 1:1로 받기 위해 사용
- 반드시 파라미터가 전송되어야 함(안됐을경우 400 error)
- Model 객체를 이용해서 뷰로 값을 넘겨줌
@RequestParam("가져올 데이터의 이름") [데이터타입] [가져온데이터를 담을 변수]
// 예시
@Controller
public class HomeController {
@RequestMapping("/board/checkId")
public String checkId(@RequestParam("id") String id, @RequestParam("pwd") String pwd, Model model) {
model.addAttribute("id", id); model.addAttribute("pwd", pwd);
return "/board/checkId";
}
}
ModelAttribute
- 요청된 여러개의 파라미터들을 1대1로 객체에 바인딩해서 받을 수 있음
Reference
https://cheershennah.tistory.com/179
https://hongku.tistory.com/119
https://velog.io/@mmy789/Spring-RequestParam-RequestBody-ModelAttribute-%EC%B0%A8%EC%9D%B4
'STUDY' 카테고리의 다른 글
JAVA | 예외처리 (Exception) (0) | 2022.04.28 |
---|---|
JavaScript | prop(), attr() (0) | 2022.04.26 |
JAVA | JSON vs Ajax (0) | 2022.04.19 |
JAVA | List vs ArrayList (0) | 2022.04.18 |
JAVA | 일반 for문 / 향상된 for문 (0) | 2022.04.18 |