SPRING

@RequestParam @ModelAttribute - HTTP 요청 파라미터

junnrecorder 2023. 5. 17. 23:00

@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