Server/Spring (Boot & Framework)

[Spring] Spring MVC: Controller에서 parameter를 받아오는 방법

ooeunz 2020. 4. 6. 12:50
반응형

 

Spring Controller에서 데이터를 받아오는 방법에 대해서 살펴보겠습니다.

 

httpServletRequest.getParameter()

@RequestMapping("/test") 
public String test(HttpServletRequest req) {

	String userId = req.getParameter("userId");
	return "test"; 
}

getParameter()는 String 값을 반환합니다.

 

 

httpServletRequest.getAttribute()

@RequestMapping("/test") 
public String test(HttpServletRequest req) {

	String userId = req.getParameter("userId");
	return "test"; 
}

getAttribute()는 getParameter()와 비슷하지만 String 값이 아닌 Object 값을 반환한다는 차이가 있습니다.

 

 

@RequestParam

@RequestMapping(value="/test", method=RequestMethod.GET)
public String test(@RequestParam(value="userId", defaultValue="ooeunz") String userId) {

	return "test"; 
}

@RequestParam은 query string 방식으로 url을 통해  parameter로 값을 받아옵니다. 갖고있는 속성으로는 value, required, defaultValue가 있습니다.

  • value는 위의 코드에서 알 수 있듯이 query string으로 받아오는 key값을 의미하고 뒤에 오는 변수에 해당 값을 바인딩합니다.
  • required값은 true일 경우 parameter가 반드시 url에 담겨있어야 합니다. 없을경우 400값을 반환하게 됩니다.
  • defaultValue는 디폴트 값을 의미합니다.

※ Query String 방식과 path value 방식이 무엇인지 모른다면 아래 url을 참고하시기 바랍니다.

 

[Network] Get방식의 Query string방식과 Path value방식

GET방식은 http method 중에서 url을 통해 정보를 전달하는 방식이다. 그런데 이러한 get을 사용하는 방법에는 두 가지가 있는데 그것에 대해 알아보겠다. 예를 들어 우리가 sns 서비스를 개발하고 있다고 가정해..

ooeunz.tistory.com

 

 

@PathVariable

@RequestMapping(value="/test/{email}", method=RequestMethod.GET)
public String test(@PathVariable("email") String email) {

	return "test"; 
}

@Pathvariable 애노테이션은 RequestMapping에 {email} 이라는 부분에 맵핑됩니다. query string 방식과 path value 방식을 이해하고 있다면 별로 어렵지 않게 사용하실 수 있을거라 생각합니다.

 

 

@RequestBody

GET방식은 request packet에 http body가 존재하지 않습니다. 따라서 @RequestBody로받으려면 반드시 POST 방식을 사용해야 합니다. @RequestBody는 JSON이나 XML과 같은 데이터를 받거나 DTO/VO 객체 전체를 받을 경우 사용합니다.

 

@RequestMapping("/test")
public String test(@RequestBody Map<String, Obejct> obj) {
	Account account = obj.get("account"); 
	return "test"; 
}

 

 

@ModelAttribute

@RequestParam과 비슷한데 1:1로 parameter를 받을 경우엔 @RequestParam을 사용하고 DTO/VO와 같이 객체 전체로 받을 경우 @ModelAttribute로 받을 수 있습니다. 예를들어 form에서 데이터를 받을 경우 form name과 DTO/VO의 변수 명을 같게 해줌으로써 자동으로 데이터를 바인딩할 수 있습니다.

@RequestMapping("/test")
public String test(@ModelAttribute UserDto user) {
	
    System.out.println(user.getUserId());
	return "test"; 
}
반응형