@RequestParam은 요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션이다.
// 1번
@RequestMapping("/requestParam1")
public String main2(@RequestParam(name="year", required=false) String year) {
}
// 1-1번
@RequestMapping("/requestParam1")
public String main2(String year) {
}
1번과 1-1번은 동일한 의미이다. @RequestParam(name="year" , required=false)는 생략가능하다.
year는 파라미터 이름이고, required는 필수여부이다. false는 필수가 아님을 의미한다.
http://localhost:8080/requestParam1을 호출하면 year=null 이다.
http://localhost:8080/requestParam1?year를 호출하면 year=""(빈문자열) 이다.
// 2번
@RequestMapping("/requestParam2")
public String main3(@RequestParam(name="year", required=true) String year) {
}
// 2-1번
@RequestMapping("/requestParam2")
public String main3(String year) {
}
2번과 2-1번은 동일한 의미이다. required가 true이기 때문에 파라미터를 필수로 입력해야한다. http://localhost:8080/requestParam2를 호출하면 year=null 이고 400 Bad Request에러가 난다.
이유는 required=true이기 때문에 클라이언트 에러가 발생하는 것이다.
http://localhost:8080/requestParam2?year을 호출하면 year=""(빈문자열) 이다. "빈문자열"이 "값"으로 들어왔기 때문에 에러가 나지 않는다.
// 3번
@RequestMapping("/requestParam3")
public String main4(@RequestParam(required=false) int year){
}
http://localhost:8080/requestParam3을 호출하면 year=null 이고, 500 java.lang.IllegalStateException 에러가 난다.
이유는 required=false이기 때문에 클라이언트는 입력을 하지 않은 것인데 들어온 null값은 int로 변환할 수 없기때문에 서버에러가 발생되는 것이다.
http://localhost:8080/requestParam3?year을 호출하면 year=""(빈문자열) 이고, 400 Bad Request. 클라이언트 에러가 발생한다. 이유는 빈문자열은 int로 변환할 수 없기 때문이다. (위에 String 예제와 다르다. int는 값을 받을 뿐 아니라 변환까지 해줘야하기 때문)
// 4번
@RequestMapping("/requestParam4")
public String main4(@RequestParam(required=true) int year){
}
http://localhost:8080/requestParam3을 호출하면 year=null 이고, 400 Bad Request. 의 클라이언트 에러가 발생한다.
필수입력이 true인데 입력하지 않았기 때문이다.
http://localhost:8080/requestParam3?year을 호출하면 year=""(빈문자열) 이고, 400 Bad Request. 클라이언트 에러가 발생한다. 이유는 빈문자열은 int로 변환할 수 없기 때문이다.
// 5번
@RequestMapping("/requestParam5")
public String main4(@RequestParam(required=false, defaultValue="1") int year){
}
필수입력(required=false)라면 기본값을 주는 것이 바람직하다. (defaultValue="1")
http://localhost:8080/requestParam5 호출하면 year=1 이다.
http://localhost:8080/requestParam3?year을 호출하면 year=1이다.
필수입력일때는 예외처리를 해서 사용자가 올바른 값을 입력할 수 있게 하는 것이 좋다.
'Programming > Spring' 카테고리의 다른 글
@GetMapping @PostMapping 그리고 view-controller (0) | 2022.01.02 |
---|---|
@ModelAttribute (0) | 2022.01.02 |
JSTL이란? JSTL core태그 (0) | 2021.04.19 |
[Spring] 스프링 MVC - Model (데이터 전달자) (0) | 2021.04.14 |
[Spring] xml 매퍼 (0) | 2021.04.14 |
댓글