@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 |