+ 추가
정확하게 하자면
requsetBody -> http body데이터
requestParam, modelAttribute -> 요청 파라미터
pathVariable -> 요청 uri
를 처리하는 것으로 모두 다른 종류의 것들이다.
@RequestBody
클라이언트에서 json,xml 등 요청 body에 데이터를 담아서 넘겨줄때 형식에 맞는 객체를 생성해준다.
@ToString
public class Person {
private String name;
private int age;
}
@PostMapping("/test")
public void test(@RequestBody Person person) {
System.out.println(person);
}
위와 같은 코드일때 json으로 name과 age를 넘겨주면 자동으로 매핑된 Person객체를 생성해준다
내부적으로 ObjectMapper 를 이용해 역직렬화 방식으로 객체를 생성하기 때문에 객체에 기본생성자는 필요하다.
@RequestParam
클라이언트에서 url로, 혹은 Form data 타입으로 파라미터를 넘겨줄때 변수이름으로 1:1 매핑하여 받는다
@PostMapping("/test")
public void test(@RequestParam String name) {
System.out.println(name);
}
구글링으로 간단하게 찾아보면 단순하게 url에 붙은 데이터만 받는다고 적어둔 블로그가 많은데, url에 붙지않는 post형식으로 넘겨준 데이터도 content-type이 form data라면 받을수있다.
변수 이름으로 찾기 때문에 사용하려는 파라미터를 명시해주어야 한다.
@ModelAttribute
requestParam과 비슷하게 Form데이터를 받지만 setter를 이용해 객체타입으로 받아올 수 있다.
@PostMapping("/test")
public void test(@ModelAttribute Person person) {
System.out.println(person);
}
form 태그를 이용하여 데이터를 전달 받을때 requestParam은 한 개씩 받아와야 하는게 불편하다.
객체단위로 받아오기때문에 requestBody와도 비슷하다고 생각할 수 있지만 form data만 받을수있으며, 내부적인 동작과정이 달라 해당 객체에 setter함수, 혹은 파라미터를 모두 받는 생성자가 필요하다.
@PathVariable
클라이언트의 요청 url에 포함된 값을 파라미터로 받는다
@GetMapping("/test/{age}")
public void test(@PathVariable int age) {
System.out.println(age);
}
요청 경로에 사용된 일부를 변수로 받는다. 보통 게시판에서 글번호를 통해 내용페이지로 넘어갈때 많이 사용한다.
'Web > Spring' 카테고리의 다른 글
[Spring security] jwt 로그인 구현에서 OncePerRequestFilter (0) | 2023.07.20 |
---|---|
[Spring] 자바 네이밍 컨벤션의 중요성 (0) | 2023.07.20 |
[Spring] @Data 어노테이션 (0) | 2023.07.20 |
[Spring]Java에서 DB 연동하여 사용하는 기술 정리 (0) | 2023.07.20 |
Spring Data JPA - 쿼리메소드 (0) | 2023.07.19 |