@ModelAttribute, @RequestParam

2022. 2. 6. 10:07Spring 기초

@ModelAttribute는 적용 대상을 Model의 속성으로 자동 추가해주는 애너테이션이다.

매서드의 1) 매개변수와 2) 반환타입 또는 컨트롤러에 적용 가능하다

public static String main(@ModelAttribute("myDate") MyDate date, Model model){

...

}

먼저 매개변수에 적용한 경우이다.

이 경우 MyDate date 는 Model m에 key-Value 값으로 자동 추가된다.

따라서 메서드 내에서 m.addAttribute("myDate", date); 처럼 모델에 따로 저장할 필요 없다.

("myDate")는 key 값으로 전달해 주는 것인데, 생략이 가능하다. 생략할 경우 매개변수의 

타입 첫 글자가 소문자로 변환되어 전달된다(MyDate --> myDate)

근데 사실, 참조형 타입의 경우 @ModelAttribute 자체가 생략 가능하다..

따로 model에 저장할 필요가 없었던 것이다~

 

@RequsetParam은 요청의 파라미터를 연결할 때 매개변수에 붙이는 애너테이션이다.

public String main2(@RequestParam(name="year", required=false) String year){
}

이와 같이 사용하거나 생략 가능하여

public String main2(String year){
}로 사용한다.

 

year은 파라미터 이름이며, required는 필수 여부를 나타낸다.

만약 아래와 같은 경우, required는 true이므로, 쿼리 스트링을 ?year=  로 전송할 경우 

빈 문자열이 전달되므로 에러가 발생하지 않는다.

public String main2(@RequestParam String year){
}

하지만 쿼리스트링이 아예 없는 경우(매개변수를 전송하지 않는 경우) 에러가 발생한다.

--> Bad Request

 

만약 year의 타입이 String이 아니라 int라면, 빈 문자열이나 null을 전송할 경우 에러가 발생한다.

(빈 문자열은 400 Bad Request, null은 서버에러 500). 둘 다 String과는 달리 int로 변환이 불가능하기 때문이다

 

**required=false 인 경우, 디폴트 값을 지정해서 넣어주어야 한다(매우 권장).

public String main1(@RequestParam(required=false, defaultValue="1") int year){...}

 

필수 입력인 경우(required=true) 예외 처리를 꼭 해주자.

@ExceptionHandler(Exception.class)
public String catch(Exception ex){
return "yoilError";
}

예외처리는 예외를 처리해주는 method를 만들면 된다!

'Spring 기초' 카테고리의 다른 글

Cookie & Session  (0) 2022.02.09
DataBinder(아주 간략)  (0) 2022.02.06
WAS(Web Application Server)와 Tomcat  (0) 2022.02.05
HTTP 요청과 응답 GET/POST  (0) 2022.02.05
Spring 공부 2일차  (0) 2022.02.04