@RequestBody @RequestParam @ModelAttribute

dalBeen·2023년 10월 18일
0

스프링

목록 보기
10/14

@RequestParam

Http 요청 ㅍ라미터를 받아오기 위해 사용
Body를 직접조회하지 않음


@RequestBody

클라이언트가 전송하는 JSON(application/josn)형태의 HTTP body 내용을 MessageConverter들 중 하나인 MappingJackson2 HttpMessageConverter를 통해 java object로 변환시켜주는 역할

  • 가장 큰 특징은 바인딩이 아닌 Spring이 메시지를 변환하는 과정에서 객체의 기본 생성자를 통해 객체를 생성하고 내부적으로 Reflection을 사용해 값을 할당

cf) Reflection?

Reflection(리플렉션)은 Java에서 제공하는 API 중 하나로, 실행 시간(runtime)에 Java 객체의 내부 속성을 조사하거나 수정하고, 클래스의 메타데이터를 조회하거나 조작할 수 있게 해주는 기능입니다. 이를 통해 개발자는 클래스나 객체의 정보(예: 클래스 이름, 멤버 변수, 메서드 등)를 동적으로 알아낼 수 있으며, 그 정보를 바탕으로 새로운 객체를 생성하거나, 메서드를 호출하거나, 변수에 값을 할당할 수 있습니다.

Spring 프레임워크 내에서 리플렉션의 사용 사례는 다음과 같습니다:

  • DI (Dependency Injection): Spring은 의존성 주입을 위해 리플렉션을 사용합니다. 주어진 클래스에 정의된 Setter 메서드나 생성자를 찾아서 해당 의존성을 주입합니다.

  • AOP (Aspect-Oriented Programming): Spring의 AOP 구현은 리플렉션을 사용하여 프록시 객체를 생성하며, 이를 통해 주요 비즈니스 로직과 관심사(예: 로깅, 트랜잭션 관리 등)를 분리합니다.

  • 데이터 바인딩: Spring은 데이터 바인딩 또는 메시지 변환 과정에서 리플렉션을 사용하여 객체의 기본 생성자를 호출하고, 해당 객체의 속성을 설정합니다.


@ModelAttribute

요청파라미터로 넣은 값들을 JSON형식으로 반환

만약에 Body에 값을 넣어 전송한다면 값이 담겨있지 않음
-> content-type multipart/form-data형태로 바꾸면 JSON 형식으로 반환됨

@ModelAttribute에는 매핑시키는 파라미터의 타입이 객체의 타입과 일치하는지를 포함한 다양한 검증(Validation) 작업이 추가적으로 진행된다.

profile
깊게 공부해보자

0개의 댓글