[Spring] RequestParam이란?

2024. 7. 14. 00:23WebBack/Spring

RequestParam은 요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션을 말한다. @RequestParam(name="year" required=false) String year)을 생략하여 String year로 표현 가능하다. 하지만 컨트롤러 매개변수에 @RequestParam만 붙어 있다면 이는 required=true를 의미한다. 

 

참고로 required는 필수 여부이다. 필수인데 입력을 하지 않으면 int year에 null이 들어가 400번대 에러(클라이언트측 에러)가 발생한다. 이름만 넣고 값을 넣지 않으면 ""(빈문자열)이 입력된다. 빈문자열은 오류를 발생시키지 않는다. 

	@RequestMapping("/requestParam2")
//	public String main2(@RequestParam(name="year", required=false) String year) {   // 아래와 동일 
	public String main2(String year) {   
//		http://localhost/ch2/requestParam2         ---->> year=null
//		http://localhost/ch2/requestParam2?year    ---->> year=""
		System.out.printf("[%s]year=[%s]%n", new Date(), year);
		return "yoil";
	}

	@RequestMapping("/requestParam3")
//		public String main3(@RequestParam(name="year", required=true) String year) {   // 아래와 동일 
		public String main3(@RequestParam String year) {   
//		http://localhost/ch2/requestParam3         ---->> year=null   400 Bad Request. required=true라서 
//		http://localhost/ch2/requestParam3?year    ---->> year=""
		System.out.printf("[%s]year=[%s]%n", new Date(), year);
		return "yoil";	
	}

 

required = false인데 year이 입력되지 않으면 500번대 에러(서버측 에러)가 발생한다. 필수 입력이 아닌데 입력이 되지 않아 year에 null이 들어갔다. null은 int로 변환할 수 없으니 에러가 발생한다. 반대로 클라이언트에서 값을 넣지 않으면 클라이언트가 값을 잘못주었기 때문에 400번대 에러이다. 

@RequestMapping("/requestParam8") 
	public String main8(@RequestParam(required=false) int year) {   
	//	http://localhost/ch2/requestParam8        ---->> 500 java.lang.IllegalStateException: Optional int parameter 'year' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.
	//	http://localhost/ch2/requestParam8?year   ---->> 400 Bad Request, nested exception is java.lang.NumberFormatException: For input string: "" 
		System.out.printf("[%s]year=[%s]%n", new Date(), year);
		return "yoil";
	}
	
	@RequestMapping("/requestParam9") 
	public String main9(@RequestParam(required=true) int year) {   
	//	http://localhost/ch2/requestParam9        ---->> 400 Bad Request, Required int parameter 'year' is not present
	//	http://localhost/ch2/requestParam9?year   ---->> 400 Bad Request, nested exception is java.lang.NumberFormatException: For input string: "" 
		System.out.printf("[%s]year=[%s]%n", new Date(), year);
		return "yoil";
	}

 

그래서 필수 입력이 아닐 때에는 기본값을 주어야 한다. defaultValue="1"을 넣으면 해결된다. 문자열 1은 숫자로 변환할 수 있으니 오류가 발생하지 않는다. 아니면 필수 입력으로 지정해야한다. 

 

	@RequestMapping("/requestParam11")   
	public String main11(@RequestParam(required=false, defaultValue="1") int year) {   
//		http://localhost/ch2/requestParam11        ---->> year=1   
//		http://localhost/ch2/requestParam11?year   ---->> year=1   
		System.out.printf("[%s]year=[%s]%n", new Date(), year);
		return "yoil";
	}

 

이렇듯이 서버는 서버측에서 오류가 발생하지 않도록 대비를 항상 해놓아야 한다. 

'WebBack > Spring' 카테고리의 다른 글

[Spring] 한글 변환 필터  (0) 2024.07.18
[Spring] 반복 연습  (0) 2024.07.16
[Spring] JSTL를 써보자  (0) 2024.07.13
[Spring] JSP 알아보기  (0) 2024.07.13
[Spring] 서블릿의 구조  (0) 2024.07.12