@RequestParam : 파라미터 이름으로 바인딩
속성 : value, requried, defaultValue
value : 요청된 데이터의 키를 명시
바인딩 대상이 되는 변수명과 키 이름이 같으면 value 속성은 생략 가능
// 요청 url localhost:8080/request-param?username=user&age=28
@RequestMapping("/request-param")
public String requestParam(
@RequestParam String username,
@RequestParam int age) {
log.info("username={}, age={}",username, age);
return "ok";
}
required : 요청 파라미터 필수 여부, 기본값은 true
만약에 required 가 true인 파라미터가 없으면 클라이언트 오류 발생
@RequestMapping("/request-param-required")
public String requestParamRequired(
@RequestParam(required = true) String username,
@RequestParam(required = false) Integer age) {
log.info("username={}, age={}",username, age);
return "ok";
}
만약 요청 url이 localhost:8080/request-param-required?age=18 이라면
required=true로 설정된 username이 존재하지 않기 때문에 오류가 발생한다.
그러나 localhost:8080/request-param-required?username=user 이라면 age 속성은 required=false 이기 때문에 정상 요청이 된다.
만약 ?username=&age=28 로 url을 호출해도 username에는 값이 "" 값으로 들어가게 되므로 유의하자!
defaultValue : 파라미터 키가 없거나 빈 값인 경우 defaultValue에 정의한 값으로 대체한다.
@RequestMapping("/request-param-default")
public String requestParamDefault(
@RequestParam(required = false, defaultValue = "guest") String username,
@RequestParam(required = false, defaultValue = "-1") int age) {
log.info("username={}, age={}",username, age);
return "ok";
}
localhost:8080/request-param-default?username= 을 호출한다면,
username = "guest" age = -1 의 값을 가지게 된다.
@ModelAttribute : 객체를 찾아 해당 객체의 setter를 호출하여 파라미터 값을 바인딩해준다.
@Data
public class HelloData {
private String username;
private int age;
}
@RequestMapping("/model-attribute-")
public String modelAttribute(@ModelAttribute HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(), helloData.getUsername());
return "ok";
}
이 때 주의할 점은, 요청 파라미터의 key name 또는 value type이 바인딩할 객체의 타입과 일치하여야 한다.
일치하지 않는 경우, BindException이 발생한다.
'SPRING' 카테고리의 다른 글
@RequestBody, @ResponseBody - HTTP Message Body 조회, 반환 (0) | 2023.05.21 |
---|---|
@RequestMapping - 요청 매핑 (0) | 2023.05.14 |