Dev_Henry

[Spring] 요청 데이터 처리 관련 어노테이션 정리 본문

Web/Spring

[Spring] 요청 데이터 처리 관련 어노테이션 정리

데브헨리 2023. 7. 20. 09:23
728x90

 

+ 추가

정확하게 하자면

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);
}
 

요청 경로에 사용된 일부를 변수로 받는다. 보통 게시판에서 글번호를 통해 내용페이지로 넘어갈때 많이 사용한다.

 

 

728x90
반응형