2022. 2. 6. 10:07ㆍSpring 기초
@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 |