본문 바로가기
자바, 스프링

스프링의 @RequestParam, @ModelAttribute, @RequestBody

by malmijalls 2023. 6. 17.

이 3가지의 차이를 자꾸 까먹는다..

 

1. @RequestParam

이 어노테이션은 클라이언트로부터 전송받은 쿼리스트링, form값 같은 단일 파라미터값을 컨트롤러 메소드의 인자에 바인딩할 때 사용

ex: localhost:8080/example?name=smaple 과 같이 요청이 들어오면

@RequestMapping("/example")
public String example(@RequestParam("name") String name) {
  System.out.println("Parameter: " + name); //name=sample
  return "response";
}

RequestParam으로 값을 받을 수 있는 것이다.

 

 

2. @ModelAttribute

이 어노테이션은 클라이언트로부터 전송받은 여러 개의 파라미터 값을 단일 객체에 바인딩하려 할 때 사용.

쿼리스트링 값도 처리 가능하지만 form값 처리할 때 흔히 사용

@RequestMapping("/example")
public String example(@ModelAttribute User user) {
  System.out.println("User name: " + user.getName());
  return "response";
}

 

* RequestParam과 ModelAttribute는 비슷해 보이지만,

단일 HTTP 요청 매개변수를 메소드 매개변수에 바인딩 하는것과

여러 HTTP 요청 매개변수를 하나의 객체에 바인딩 하는 것으로 차이가 있다.

 

3. @RequestBody

이 어노테이션은 HTTP 요청 본문을 자바 객체로 변환하여 바인딩할 때 사용하며

주로 JSON, XML과 같은 메세지 바디를 객체로 변환할 때 사용한다.

 

HTTP요청의 body값을 이용하는 것이므로 GET방식은 사용이 불가하다.

 

@RequestMapping(value = "/example", method = RequestMethod.POST)
public String example(@RequestBody User user) {
  System.out.println("User name: " + user.getName());
  return "response";
}

 

4. @PathVariable

localhost:8080/choboCoder라는 URL주소가 있고  

@RequestMapping("{id}")와 같이 지정하면 해당 위치의 path값이 바인딩 된다.

  @GetMapping("{id}")
  public void sample(@PathVariable("id") String id ) { //id에 choboCoder값이 바인딩된다.
        ...코드...
        }

 

'자바, 스프링' 카테고리의 다른 글

오라클 MS949 Characterset에서 이모지 저장  (1) 2022.09.27

댓글