[Spring] RequestParam이란?
2024. 7. 14. 00:23ㆍWebBack/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 |