@RequestParam(required=false)는 생략 가능. 필수입력X
@RequestParam(required=true)는 생략 불가. 필수입력.
매개변수가 String일 때
매개변수가 int일 때
//required=false일 때, 값이 null이거나 빈문자열일때를 위해
//defaultValue="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
...
}
//필수입력이라 클라이언트에서 입력을 해야 하는데
//year=null, year="" 둘 다 클라이언트가 잘못 입력. 400에러.
//필수입력일 때는 예외처리를 해주는 것이 좋다.
@RequestMapping("/requestParam9")
public String main9(@RequestParam(required=true) int year) {
//http://localhost/ch2/requestParam9 --> 400
//http://localhost/ch2/requestParam9?year --> 400
}
//예외처리 catcher()메서드
//@ExceptionHandler(Exception.class)를 적으면
//컨트롤러의 모든 예외가 발생했을 때 yoilError를 리턴.
@ExceptionHandler(Exception.class)
public String catcher(Exception ex) {
return "yoilError";
}
각 프로젝트의 web.xml에 저장
<!-- 한글 변환 필터 시작 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 한글 변환 필터 끝 -->
trace : 에러 출력 로그 레벨(log level) 중 제일 자세한 것.
info를 trace로 변경하면 trace 사용 가능.
<logger name="org.springframework.web">
<!-- <level value="info" /> : 기본값. -->
<!-- trace는 에러출력 할 때 보는 것. log level중에 제일 자세한 것. -->
<level value="trace" />
</logger>
//1번. 모든 매개변수에 @RequestParam을 붙임.
@RequestMapping("/getYoilMVC2")
public String main(@RequestParam(required=true) int year,
@RequestParam(required=true) int month,
@RequestParam(required=true) int day, Model model) throws IOException
//2번. 1번처럼 매개변수가 많을 때 MyDate date로 받을 수 있음.
//MyDate클래스에 매개변수 선언, getter,setter 작성해야 함.
@RequestMapping("/getYoilMVC4")
public String main(MyDate date, Model model) throws IOException
//1. 유효성 검사 매개변수 변경
if(!isValid(date))
return "yoilError";
//2. 요일 계산 매개변수 변경
char yoil = getYoil(date);
//3. model에 저장할 때 key, value 변경
model.addAttribute("myDate", date);
model.addAttribute("yoil", yoil);
//getter, setter를 이용하도록 메서드 변경.
//원래 작성된 메서드를 생성자 (MyDate date)로 오버로딩해서,
//원래 작성된 메서드의 매개변수를 getter, setter로 해서 호출.
private boolean isValid(MyDate date) {
// TODO Auto-generated method stub
return isValid(date.getYear(), date.getMonth(), date.getDay());
}
private char getYoil(MyDate date) {
// TODO Auto-generated method stub
return getYoil(date.getYear(), date.getMonth(), date.getDay());
}
package com.fastcampus.ch2;
public class MyDate {
//매개변수 선언
private int year;
private int month;
private int day;
//getter, setter
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
@Override
public String toString() {
return "MyDate [year=" + year + ", month=" + month + ", day=" + day + "]";
}
}
year에서 myDate.year로 변경(getter이용)
<P> ${myDate.year }년 ${myDate.month }월 ${myDate.day }일은 ${yoil }입니다.</P>