Spring - 기본타입은 null이 허용되지 않는다.

민찬홍·2023년 11월 24일

Spring

목록 보기
2/16
post-thumbnail

두 코드가 있다. 두 코드 모두 컨트롤러단에서는 매개변수를 확인하지 못한다.

☕️ 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이 알지 못해도 실행은 된다.


이유

기본형(primitive type) 매개변수

  • Spring MVC는 기본형 매개변수를 바로 인식하지 못한다.
  • 따라서 code1에서 int a, int b 로 매개변수를 선언하면 Spring MVC는 이를 인식하지 못한다.
  • 이 경우 code1에서는 @RequestParam 어노테이션을 사용하여 명시적으로 요청 파라미터를 지정해줘야 한다.
@GetMapping("/calc")
@ResponseBody
String showCalc(@RequestParam int a, @RequestParam int b) {
    return "계산기";
}

Wrapper 타입 매개변수

  • Spring MVC는 Wrapper 타입 매개변수를 허용하며, 이 경우 해당 타입이 null일 수 있다.
  • code2에서 Integer a, Integer b 로 매개변수를 선언하면 Spring MVC는 이를 인식하고 자동으로 매개변수를 처리한다.
  • 만약 요청 파라미터가 없으면 Wrapper 타입의 변수는 null이 된다.
@GetMapping("/calc2")
@ResponseBody
String showCalc2(Integer a, Integer b) {
    return "계산기2";
}

결론

기본적으로 Spring MVC는 매개변수를 자동으로 변환해주는 기능을 제공한다. 그리고 @RequestParam 어노테이션을 사용하면 요청 파라미터와 매개변수를 매핑할 수 있다. 반면에 Wrapper타입은 null을 허용 하므로 해당 매개변수가 없는 경우에도 정상적으로 처리된다.

profile
백엔드 개발자를 꿈꿉니다

0개의 댓글