Backend/Spring

@ModelAttribute @RequestParam @RequestBody 차이

seung_soos 2023. 5. 6. 16:40

시작하며

Spring을 사용하며 @RequestParam, @RequestBody, @ModelAttribute 3가지 어노테이션을 활용하였다.

대충 어떻게 사용하는지는 알지만 한번 정리의 필요성을 느꼈다. 정리 고고

 

@RequestParam

public String getTest(@RequestParam("name") String name){
	System.out.println(name);
}

@RequestParam은 1개의 HTTP 요청 파라미터를 받기위해서 사용한다.

 

- value

- defaultValue

- required = true(기본설정 true / )false 설정가능

 

required = false 설정을 하지않고 파라미터를 전송하지않을시 400 에러가 발생한다.

@RequestBody

public String getTest(@RequestBody Test test){
	System.out.println(test);
}

Json형태의 HTTP Body내용을 Java 객체로 변환시켜주는 역할을 한다.

Get과 Post 방식 모두 사용은 가능하지만, @RequestBody는 Body안에 Json을 포함해야한다.

하지만 Get은 QueryParameter방식으로 보내기때문에 Get은 Get답게 Post는 Post답게 사용해야한다.

 

 

@ModelAttribute 

@Getter
@Setter
public class TestDto {
	private String name; 
	private int age; 
} 

public class TestController { 

	@RequestGetMapping(value = "/hi") 
	public void getTest(@ModelAttribute("test") TestDto test){ 
		System.out.println("이름 : " + test.getName());
		System.out.println("나이 : " + test.getAge()); 
	} 
}

@ModelAttribute는 Form형태 기반의 요청들을 받는다. Get Post 둘다 사용가능하다. Get의 경우는 Query Parameter로 요청데이터를 보내고, Post의 경우 x-www-from-urlencoded형태로 요청데이터를 보낸다.단, DTO에 바인딩시 Setter를 통해 바인딩된다. Setter가 없으면 바인딩되지않음!