오늘은 Spring에서 요청과 파라미터에 관련된 어노테이션에 대해 알아보자.
- 클라이언트 요청(URL)에 맞는 클래스나 메서드를 연결시켜주는 어노테이션이다.
✅ 단, 클래스 레벨에 @RequestMapping이 존재하지 않으면 메서드 레벨의 해석이 달라진다.
-> 메서드 레벨 : 단독 요청 처리 주소
- Request의 header 값을 가져올 수 있으며 해당 어노테이션을 쓴 메서드의 파라미터에 사용한다.
@Controller // 이 Class는 Controller 역할
@RequestMapping("/member") // 이 Class는 /member 들어오는 요청을 모두 처리
public class UserController {
@RequestMapping(method = RequestMethod.GET)
public String getUser(@RequestHeader(value="Accept-Language") String acceptLanguage) {
// GET method, /user 요청을 처리
}
}
- 이 어노테이션이 붙은 파라미터에는 http 요청의 본문(body)이 그대로 전달이 된다.
- 일반적인 GET / POST의 요청 파라미터라면 @RequestBody를 사용할 필요가 없다.
반면에 XML이나 JSON 기반의 메세지를 사용하는 요청의 경우엔 이 방법이 유용하다.- HTTP 요청의 바디 내용을 자바객체로 변환해서 매핑된 메서드 파라미터로 전달해준다.
- 컨트롤러에서 반환되는 값은 일반적으로 forward 또는 redirect 방식의 경로이다(반환되는 값이 경로로 인식됨).
- 이를 해결하기 위해서 이러한 반환되는 값을 경로가 아닌 값으로 인식하게 해주는 @ResponseBody가 존재한다.
- 반환되는 값을 응답의 Body에 추가하여 이전 요청 주소로 돌아간다.
이는 컨트롤러에서 반환되는 값이 경로가 아닌 "값 자체"로 인식이 된다.
- 클라이언트 요청 시 같이 전달된 파라미터를 변수에 저장하는 어노테이션이다.
어떤 파라미터를 변수에 저장할지는 "name 속성 값"을 이용해서 지정한다.
@RequestParam("name속성값") 자료형 변수명
✅ "name속성값"과 변수명이 같으면 @RequestParam을 생략할 수 있다.
✅ 매개변수 지정 시 데이터 타입의 파싱을 자유롭게 진행할 수 있다.
ex) String -> int 로 변환
@RequestParam("memberNo") String memberNo
@RequestParam("memberNo") int memberNo
input 태그의 name 속성 값(속성을 하나도 적지 않은 경우의 기본값)
@RequestParam("inputEmail") == @RequestParam(value="inputEmail")
입력된 name 속성 값이 필수적으로 파라미터에 포함되어야 되는지를 지정
required = true (기본값) / required = false
required = true 일 때 파라미터가 없으면 -> 400 잘못된 요청(Bad Request) 발생
required = false 일 때 파라미터가 없으면 -> null
required가 false인 상태에서 파라미터가 존재하지 않을 경우의 값을 지정한다.
ex)
@RequestParam(value="inputName", required = false, defaultValue = "홍길동" ) String name
- 파라미터 중에 name 속성 값이 VO의 필드와 일치하면 해당 VO 객체의 필드에 값을 세팅한다.
@ModelAttribute VO타입 변수명
@ModelAttribute를 이용해서 객체에 값을 직접 담을 때의 주의사항이 있다.
Getter는 JSP - EL 사용 시에 반드시 필요하다.