두 코드가 있다. 두 코드 모두 컨트롤러단에서는 매개변수를 확인하지 못한다.
☕️ code1
@GetMapping("/calc")
@ResponseBody
String showCalc(int a, int b) {
return "계산기";
}
위의 코드는 a와 b값이 기본형으로 선언되어 있어 Spring 자체에서 값을 인식하지 못해 실행 후 페이지를 띄워보면 에러가 난다.
☕️ code2
@GetMapping("/calc2")
@ResponseBody
String showCalc2(Integer a, Integer b) {
return "계산기2";
}
위의 코드는 a와 b값이 wrapper타입으로 선언되어 있다. 따라서 a와 b값이 무엇인지 Spring이 알지 못해도 실행은 된다.
int a, int b 로 매개변수를 선언하면 Spring MVC는 이를 인식하지 못한다. @RequestParam 어노테이션을 사용하여 명시적으로 요청 파라미터를 지정해줘야 한다. @GetMapping("/calc")
@ResponseBody
String showCalc(@RequestParam int a, @RequestParam int b) {
return "계산기";
}
Integer a, Integer b 로 매개변수를 선언하면 Spring MVC는 이를 인식하고 자동으로 매개변수를 처리한다. @GetMapping("/calc2")
@ResponseBody
String showCalc2(Integer a, Integer b) {
return "계산기2";
}
기본적으로 Spring MVC는 매개변수를 자동으로 변환해주는 기능을 제공한다. 그리고 @RequestParam 어노테이션을 사용하면 요청 파라미터와 매개변수를 매핑할 수 있다. 반면에 Wrapper타입은 null을 허용 하므로 해당 매개변수가 없는 경우에도 정상적으로 처리된다.