RequestParam란?
- 요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션
매개변수가 String Type일 경우 ---- >>>>
@RequestMapping("/requestParam")
// public String main(@ReuestParam(name="year" required=false) String year {String year) {
public String main(String year) { // 애너테이션 생략 가능, 위와 동일하다
// http://localhost/inout/requestParam ---> year=null
// http://localhost/inout/requestParam?year ---> year=""
return "view";
}
@RequestMapping("/requestParam")
// public String main(@ReuestParam(name="year" required=true) String year {String year) {
public String main(@RequestParam String year) { // 위와 동일하다
// http://localhost/inout/requestParam ---> year=null 400 Bad Request, required=true라서 에러 발생
// http://localhost/inout/requestParam?year ---> year=""
return "view";
}
매개변수가 int Type일 경우 ---- >>>>
@RequestMapping("/requestParam")
public String main(@RequestParam(required=false) int year) {
// http://localhost/inout/requestParam
---> 500, java.lang.IllegalStateException 발생
false라서 파라미터 없을 시 null이 들어가는데 null을 int로 변환할 수 없어서,
// http://localhost/inout/requestParam?year
---> 400 Bad Request
빈문자열이 들어오는데 빈문자열을 int로 바꿀 수 없음. 값을 주긴 줬는데
잘못줬으니 클라이언트 에러인 400에러가 뜬다.
return "view";
}
따라서 필수값이 아닐경우 다음과 같이 기본값을 줘야한다.
public String main(@RequestParam(required=false, defaultValue="1") int year) {
@RequestMapping("/requestParam")
public String main(@RequestParam(required=true) int year) {
// http://localhost/inout/requestParam
---> 400, 필수 입력인데 안넣어서 클라이언트 에러
// http://localhost/inout/requestParam?year
---> 400, 빈문자열을 줘도 숫자로 변환할 수 없으니 클라이언트에러
return "view";
}
따라서 필수값이 아닐경우 다음과 같이 기본값을 줘야한다.
public String main(@RequestParam(required=false, defaultValue="1") int year) {
* required=true 일 때는 값을 입력안하거나 잘 못 입력하면 에러가 발생하니 반드시 예외처리를 하여 사용자가 올바른 값을 입력할 수 있게 처리해주는게 좋다.
반대로 required=false일 경우엔, 디폴트 값을 줘야한다.