스프링은 파라미터를 컨트롤러로 사용하기 쉽게 넘겨주는 @RequestParam
기능을 가지고 있다.
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamRequired(
@RequestParam(required = false) String username,
@RequestParam(required = true) int age
) {
log.info("username={} age ={}", username, age);
return "ok";
}
위와 같은 경우 username
은 필수가 아니지만 age
는 필수이기 때문에 age 파라미터를 넘지기 않는다면 (=null) 400에러를 뱉는다.
만약 username=123&age=
와 같은 경우 age
에는 "" 빈문자가 들어와 컨트롤러에서 Integer 파싱에러가 발생한다.
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamRequired(
@RequestParam(required = false) String username,
@RequestParam(required = true, defaultValue = "-1") int age
) {
log.info("username={} age ={}", username, age);
return "ok";
}
다음과 같은 경우 age
가 null인 경우, 빈문자인 경우 기본 값으로 대체된다.
@RequestParam Map<String,Object> map
@RequestParam MultivalueMap<String,List<Object>> map
이처럼 한번에 map으로 파라미터를 받을 수 있다.
@Data
public class HelloData {
private String username;
private int age;
}
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData data) {
log.info("helloDate = {}", data);
return "ok";
}
요청 파라미터의 이름으로 객체의 프로퍼티를 찾는다.
그리고 해당 프로퍼티의 setter를 호출해서 파라미터 값으로 바인딩한다.
만약 자료형이 맞지 않을 경우 바인딩 에러를 발생시킨다.
argumentResolver 로 지정해둔 타입은 바인딩이 되지 않음.