Spring RequestMapping 2편
포스트
취소

Spring RequestMapping 2편

해당 원글은 미디엄 블로그에서 작성한 내용을 해당 블로그에 기록하기 위해 가져옴. 원글은 2021.06.14일 작성.

개요

  • 2편은 Controller에 값을 전달 받는 방법 확인하기.

Controller

4가지 annotation을 사용하는게 가장 일반적이다.

  • RequestParam
  • RequestBody
  • ModelAttribute
  • PathVariable

RequestParam

  • 우선 RequestParam 방식.
  • 간단하게 값을 받을 때 유용하게 사용된다.
1
2
3
4
5
6
7
@GetMapping("/cash")
public String getCash(@RequestParam String num) {
    System.out.println("num : " + num);
    return "get";
}
//http://localhost:8080/cash?num=2
//num : 2
  • annotation 생략도 가능하다.
1
2
3
4
5
@GetMapping("/cash")
public String getCash(String num) {
    System.out.println("num : " + num);
    return "get";
}
  • Object로 값을 전달받는 방법이 있는데 annotation 없이 사용하면 어떻게 될까?
  • 아래와 같이 Class를 하다 만들고 Get 방식으로 값을 받아보자.
1
2
3
4
5
6
7
8
9
10
11
12
public class CashParam {
    @Getter
    int num;
    @Getter
    String account;
}
...
@GetMapping("/cash")
public String getCash(CashParam param) {
    System.out.println("param : " + param.getNum());
    return "get";
}
  • 아까와 같은 방식으로 (cash?num=2) 전달하면 원하는대로 동작하지 않는다 그 이유는 int num 변수에 Setter가 없기 때문이다. annotation을 생략하면 또 자동으로 ModelAttribute 방식으로 동작한다는 것을 알 수 있다.
1
2
3
4
5
6
7
public class CashParam {
    @Getter
    @Setter
    int num;
    @Getter
    String account;
}

RequestBody

  • 그렇다면 RequestBody로 지정을 해보자.
1
2
3
4
5
@GetMapping("/cash")
public String getCash(@RequestBody String num) {
    System.out.println("num : " + num);
    return "get";
}

두둥!

  • RequestBody는 말그대로 HttpRequest Body의 값을 받아오는 것이므로 Body가 없는 Get방식에는 사용할 수 없다.
  • 다음은 PathVariable. 이렇게 간단하게 사용할 수 있다.
1
2
3
4
5
@GetMapping("/cash/{num}")
public String getCash(@PathVariable String num) {
    System.out.println("num : " + num);
    return "get";
}

마무리

  • Controller에 값을 전달하는 다양한 방법을 알아 봤는데 하나의 메서드에 다양한 annotation을 적절히 섞어서 사용하면 된다.

참고한 블로그 — https://mangkyu.tistory.com/72

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

Spring RequestMapping 1편

Spring RequestMapping 3편