@RequestParam
- Servlet 요청 파라미터(query parameter 또는 form data)를
메소드의 파라미터에 바인딩할 때 사용되는 어노테이션 (주로 단일 요청 파라미터) - 동작 원리
@RequestParam("petId") int id→request.getParameter("username")
- 쿼리 파라미터 이름이 변수 이름과 같으면
@RequestParam(name="xx")생략 가능 String,int,Integer등의 단순 타입이면@RequestParam도 생략 가능String이 아닌 경우 자동으로 타입 변환(Type Conversion) 적용
- 파라미터 타입을 배열이나 리스트로 선언 가능
required옵션- 파라미터 필수 여부를 결정한다. (기본값 = true)
required = false혹은java.util.Optional래퍼 사용 시- 매개 변수가 없어도 예외를 던지지 않는다.
- null 값은 기본형에 입력이 불가능하므로
defaultValue혹은 래퍼클래스를 이용해야한다.
defaultValue옵션- 파라미터에 값이 없을 때,
defaultValue를 사용하면 기본 값 적용 가능 - 쿼리 파라미터가 빈 문자인 경우에도 적용된다.
- 기본 값이 존재하기 때문에
required옵션 여부는 의미가 없다.
- 파라미터에 값이 없을 때,
- requestParamMap
- 파라미터를
Map,MultiValueMap으로 조회 가능 - 어노테이션에 매개변수 이름이 지정되지 않은 경우에도, Map에서 꺼내쓸 수 있다.
- 파라미터의 값이 1개가 확실하면
Map, 그렇지 않다면MultiValueMap사용
- 파라미터를
@ModelAttribute
- Servlet 요청 파라미터(query parameter 또는 form data)를
도메인 모델이나 DTO와 같은 복합 객체에 바인딩할 때 사용되는 어노테이션 - 동작 원리
- 객체 생성
- 요청 파라미터의 이름으로 객체의 프로퍼티를 찾고,
setter를 호출해서 파라미터의 값을 입력
- 프로퍼티
- 객체에
getA(),setA()메서드가 있으면, 해당 객체는a라는 프로퍼티를 가지고 있다. a프로퍼티의 값 변경 시setA()호출, 조회시getA()호출
- 객체에
- 어노테이션 생략 시, @ModelAttribute 적용
String,int,Integer등의 단순 타입 혹은 argument resolver로 지정해둔 타입 제외
- 바인딩 오류
- 적절한 타입을 입력하지 않으면
BindException발생 BindingResult에 에러 저장
- 적절한 타입을 입력하지 않으면

@RequestBody
- 클라이언트로부터 전달된 request body의 데이터를
메서드의 파라미터로 바인딩하는 데 사용되는 어노테이션 - HTTP 메시지 바디 정보를 편리하게 조회 가능
- 헤더 정보가 필요한 경우
HttpEntity혹은@RequestHeader사용
- 헤더 정보가 필요한 경우
- request body 데이터 - 자바 객체 변환
objectMapper를 통해서 문자로 된 JSON 데이터인messageBody를 자바객체로 변환- 객체 파라미터 : 직접 만든 객체 지정
ex)@RequestBody HelloData data - HttpEntity 사용
- 어노테이션 생략 불가
- 어노테이션 생략 시
@ModelAttribute적용- HTTP 메시지 바디가 아니라 요청 파라미터 처리
- 어노테이션 생략 시
- 주의 사항
- HTTP 요청 시,
content-type은application/json만 가능 - JSON을 처리할 수 있는 HTTP 메시지 컨버터가 실행되기 때문에
- HTTP 요청 시,

'Develop > Spring' 카테고리의 다른 글
| [Spring Web MVC] Exceptions - @ExceptionHandler (0) | 2023.04.17 |
|---|---|
| [Spring Web MVC] Handler Methods - Return Values (0) | 2023.04.17 |
| [Spring Web MVC] Request Mapping - consumes, produces (0) | 2023.04.17 |
| [Spring Web MVC] Request Mapping - Parameters, headers (0) | 2023.04.17 |
| [Spring Web MVC] Request Mapping - URI patterns (0) | 2023.04.17 |