_DoYun
_yunilog
_DoYun
전체 방문자
오늘
어제
  • 전체 (83)
    • spring boot main 프로젝트 해결 (2)
    • 회고 (0)
      • pre-project(stackoverflow) (0)
    • 지식창고 (25)
    • 후기 (1)
    • LINUX (2)
    • HTML&CSS (2)
    • SQL (2)
    • 기술 면접 질문지 (1)
      • Chapter1 (1)
      • Chapter2 (0)
    • JAVA (25)
      • JAVA 기초 문법 (1)
      • Collection (1)
      • Enum,Annotation,Stream,람다 (3)
      • 입출력, Thread, JVM (1)
      • Spring Framework (3)
      • Spring MVC (6)
      • JPA (1)
      • Test (3)
      • API 문서 (1)
      • 인증&보안 (2)
      • AWS (2)
    • 알고리즘 (19)
      • 프로그래머스_LEVEL_3 (6)
      • 백준 (0)
      • 프로그래머스_LEVEL_2 (13)
    • Comento (2)
    • Inflearn (2)
      • HTTP (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
_DoYun

_yunilog

JAVA/Spring MVC

[자바 intellij] @RequestParam? @ModelAttribute? @RequestBody는 또 뭐야??

2022. 8. 14. 03:23

이번 포스팅에서는 위 3가지 에노테이션들에 대해 비교해볼 건데 핵심은 @RequestParam과 @ModelAttribute는 주로 파라미터 값을, @RequestBody는 Http Body 값을 가져오기 위해 활용하는 에노테이션들입니다.

 

# @RequestParam

정말 자주 쓰이는 에노테이션으로 개발을 한다면 꼭 한번 마주칠 개념입니다. 위에서 @RequestParam은 파라미터를 가져온다고 했는데 다음의 예시를 보면 이해가 편하실 것입니다.

네이버에서 세계일보 사이트에 들어가면 다음과 같은 url을 확인할 수 있습니다.

newsstand.naver.com/까지는 이해하겠는데 그 뒤의 내용은 무엇일까요? 이것이 바로 Http 요청 파라미터입니다. 해당 url에서는 각각 list와 pcode라는 파라미터 name이 &에 묶여서 2개의 value 값을 가지고 있습니다. 

 

만약 위 사이트에서 해당 파라미터들을 가져오려 한다면? 코드는 다음과 같을 것입니다.

@GetMapping("/newsstand.naver.com")
public void practice(
        @RequestParam("list") String name,
        @RequestParam("pcode") Integer price) 
{
    System.out.println(name);
    System.out.println(price);
}

@RequestParam()을 통해 각각 list, pcode 내에 저장되어 있는 value 값을 가져올 수 있습니다.

 

# @ModelAttribute

@ModelAttribute 또한 위 @RequestParam과 마찬가지로 Http 요청 파라미터를 가져올 수 있다고 말했습니다. 그럼 어떤 차이점이 있는 것일까요?

@RequestParam이 하나의 name-value를 가져올 수 있었던 반면에 @ModelAttribute는 이 파라미터들을 객체에 매핑시키는 것이 가능합니다. 

@Getter
@Setter
public class Hello {

    private String list;
    private Integer pcode;


    public Hello(String list,Integer pcode) {
        this.index = index;
        this.writer = writer;
    }
}

만약 다음과 같은 클래스가 존재한다고 가정하겠습니다. 딱 필드들의 이름만 봐도 저희가 받아 오려는 데이터들과 연관이있겠다는 느낌이 오시죠?

 

이제 파라미터들을 받아오는 코드입니다. 참고로 해당 코드는 보통 Controller라는 클래스에 들어있습니다. 

@GetMapping("/newsstand.naver.com")
public void practice(
        @ModelAttribute Hello hello,
                    ) 
{
    System.out.println(hello.getList());
    System.out.println(hello.getAge());
}

자 이제 앞서 설명한 @RequestParam 부분의 코드와 차이 느껴지시나요? 결론부터 말하자면 요청 url로 들어온 HTTP 파라미터들을 Hello 클래스와 매핑시켜 이름이 같은 필드 값에 파라미터들의 value 값들을 넣어준 것입니다.

 

@RequestParam에 비해 고작 코드 한 줄 더 줄어든 것이 아닙니다. 만약 파라미터들을 100개, 1000개라면? 물론 클래스에서 미리 설정해야 하겠지만 고작 한줄로 한번에 수 많은 데이터들을 받아 올 수 있다는 장점이 있습니다. 

 

# @RequestBody

자 이제 마지막 개념입니다. 앞서 설명한 다른 에노테이션들에 비해 @RequestBody는 Http 요청 Body!! Body!!에서 데이터를 가져오는 에노테이션입니다.

 

설명에 앞서 위 사진은 PostMan이라고 부르는 소프트웨어로 Http 요청,응답을 도와주는 기능을 가지고 있습니다.

 

예를 들어 위 사진처럼 세계일보 사이트에 데이터를 보낼 때 지금까지 파라미터로 보내는 것이 아닌 Body에 Json 형태로 데이터를 보낸다면 어떻게 받아야 할까요? 이때 필요한 것이 바로 @RequestBody!!

@Getter
@Setter
public class Hello {

    private String list;
    private Integer pcode;


    public Hello(String list,Integer pcode) {
        this.index = index;
        this.writer = writer;
    }
}

Hello 클래스는 어차피 넣어줘야할 데이터가 똑같기 때문에 유지해줍니다.

 

@PostMapping("/newsstand.naver.com")
public void practice(
        @RequestBody Hello hello,
                    ) 
{
    System.out.println(hello.getList());
    System.out.println(hello.getAge());
}

전체적인 형태를 보시면 @ModelAttribute와 매우 유사합니다. 실제로 기능도 유사하죠 하지만 파라미터로 받는 데이터 , Body로 받는 데이터에는 분명한 차이가 존재합니다.

 

'JAVA > Spring MVC' 카테고리의 다른 글

자바 Spring MVC에서의 예외 처리 @ExceptionHandler, @RestControllerAdvice  (1) 2022.06.30
[Spring 자바] Mapper에 대해 알아보자  (1) 2022.06.29
[자바 Spring] DTO에 대해 배워보자  (1) 2022.06.28
[자바 Spring] HTTP Request 헤더(Header) 정보 얻기  (0) 2022.06.26
자바 Spring MVC의 개념에 대해 알아보자  (0) 2022.06.25
    'JAVA/Spring MVC' 카테고리의 다른 글
    • 자바 Spring MVC에서의 예외 처리 @ExceptionHandler, @RestControllerAdvice
    • [Spring 자바] Mapper에 대해 알아보자
    • [자바 Spring] DTO에 대해 배워보자
    • [자바 Spring] HTTP Request 헤더(Header) 정보 얻기
    _DoYun
    _DoYun

    티스토리툴바