http 요청 메서드 get 방식은 클라이언트의 요청 데이터를 url에 붙혀서 보내며
post 방식은 body에 데이터를 붙혀서 보낸다.
http의 구조는 body 와 header로 구분되어있다.
header
header는 크게 세가지로 나뉜다.
general header : 요청,응답에 대한 날짜 또는 시간 등에 대한 일반적인 정보, 전송되는 데이터와는 관련이 없는 헤더.
request header : 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더.
entity header : 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더.
body
해당 요청 응답의 실제 메세지,내용
@RestController
public class HomeController {
@GetMapping(value = "/test")
public ResponseEntity<String> getTest(NameFetch fetch) {
return ResponseEntity.ok(fetch.getName());
}
}
@Getter
@Setter
public class NameFetch {
private String name;
}
이 코드에서 NameFetch 는 querystring 으로 들어올까 body 로 들어올까?
정답은 querystring 으로 들어온다
앞에 @ModelAttribute 가 생략된 것이다.
@RequestParam또한 querystring 으로 파라미터를 받는 어노테이션이며 생략이 가능하다.
스프링에서 단순 타입(String , int)등은 @RequestParam를 생략할 수 있으며, 그외의 오브젝트는 모두 @ModelAttribute를 생략 할 수 있다.
단, 파라미터로 받는 데이터는 Setter가 구현되어 있어야 한다
body로 데이터를 받고 싶을 때는 @RequestBody를 사용한다
body 데이터가 json 데이터일 때 setter가 없어도 동작한다
@PostMapping(value = "/test2")
public ResponseEntity<String> postTest(@RequestBody NameFetch fetch) {
return ResponseEntity.ok(fetch.getName());
}
get방식은 꼭 url 로만 데이터를 보내야 하는건가 ?
@GetMapping(value = "/test3")
public ResponseEntity<String> getBodyTest(@RequestBody NameFetch fetch) {
return ResponseEntity.ok(fetch.getName());
}
get방식도 body에 데이터를 담아 보낼 수 있다