spring_프로젝트_0910
@RestController : @Controller와 달리 @RestController는 리턴값에 자동으로 @ResponseBody가 붙게되어 별도 어노테이션을 명시해주지 않아도 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달 됨
@Controller : 바디를 자바객체로 받기 위해서는 @ResponseBody 어노테이션을 반드시 명시해주어야 함
@RequestBody / @ResponseBody 를 이용한 데이터 송수신 (비동기처리 시 사용하는 어노테이션)
-> HTTP요청본문(body)을 자바객체로 변환하고 자바객체를 다시 HTTP응답본문(body)으로 변환해줌
-> @RequestBody가 붙은 파라미터에는 HTTP 요청본문이 그대로 전달됨/ HTTP 요청 바디내용을 통째로 자바객체로 conversion 하는데, 이때 HttpMessageConverter를 사용함 >> RequestMappingHandlerAdpter 에는 HttpMessageConverter 타입의 메세지 변환기가 여러개 등록되어 있음. 변환된 자바 객체는 URL매핑된 컨트롤러 메서드의 파라미터로 전달해줌 (일반적인 get/post 요청 파라미터는 @RequestBody를 사용할 일이 없음 / xml이나 json기반 데이터를 포맷을 사용하는 요청의 경우 이 방법이 유용함)
@RequestMapping(value = "/login")
public String ajaxTest(@RequestBody MemberVO vo) throws Exception {
System.out.println(vo.getId());
return "member/login";
}
-> @ResponseBody가 붙은 파라미터는 자바 객체(비즈니스 로직의 결과물)를 HTTP 요청의 바디본문으로 매핑하여 클라이언트로 전송함 (= @Responsebody 어노테이션을 사용하면 http요청 body를 자바 객체로 전달받을 수 있음)
비동기 통신은 요청 > 응답이 화면전환(새로고침) 없이 이루어지며 비동기통신을 하기 위해서는 요청/응답 모두 body(본문)에 데이터를 담아서 보내야 함 >> 요청본문 RequestBody / 응답본문 ResponseBody
본문에 담기는 데이터 형식 중 대표적으로 사용하는 것이 JSON
참고 https://cheershennah.tistory.com/179
JSON (= 클라이언트와 서버간의 비동기 통신시 사용되는 데이터 형식)
> key-value 한쌍으로 데이터 object 를 전달하기 위해 사용하는 개방형 표준 포맷
> http통신시 데이터를 주고 받을 때 자주 사용되는 데이터 포맷(json, xml 등)
> 비동기식 통신(ajax)을 하기 위함
// JSON 포맷 예시
let json = {"key1" : "value1", "key2" : "value2"}
JSONP (= JSON with Padding)
> 클라이언트 단이 아닌,
다른 도메인에 있는 서버로부터 데이터를 요청하는 경우 사용되는 데이터 포맷
> JSON데이터를 클라이언트가 지정한 콜백함수로 감싸 클라이언트에 전송
> JS는 서로 다른 도메인에 대한 요청을 보안상 제한하는데,
개발 중에는 다른 도메인으로부터 데이터를 가져와야하는 상황이 있기 때문에
JSONP 방식을 사용함
// $.ajax에서의 JSONP 형식 예시
data : JSON.stringify({id : id, pw : pw})
참고 https://cheershennah.tistory.com/155
JSON이란? / JSONP 란? 차이점 비교.
JSON이란? Java Script Object Notation 키와 값(key-value) 한쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준 포맷이다. http통신 시 데이터를 주고받을 때 흔히 쓰이는 데이터 포맷
cheershennah.tistory.com
>> @RequestBody / @ResponseBody 정리
클라이언트에서 서버로 필요한 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아서 서버로 보내면, 서버에서는 @RequestBody 어노테이션을 사용하여 HTTP 요청 본문에 담긴 값들을 자바객체로 변환시켜 객체에 매핑함
서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용하여 자바 객체를 HTTP 응답 본문의 형태로 매핑하여 클라이언트로 전송함