2-17 @RequestParam과 @ModelAttribute

서현우·2022년 5월 13일
0

스프링의정석

목록 보기
17/85

@RequestParam

@RequestParam(required=false)는 생략 가능. 필수입력X
@RequestParam(required=true)는 생략 불가. 필수입력.

  1. 매개변수가 String일 때

  2. 매개변수가 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>
<!-- 한글 변환 필터 끝 -->

log4j.xml

trace : 에러 출력 로그 레벨(log level) 중 제일 자세한 것.
info를 trace로 변경하면 trace 사용 가능.

	<logger name="org.springframework.web">
		<!-- <level value="info" /> : 기본값. -->
		<!-- trace는 에러출력 할 때 보는 것. log level중에 제일 자세한 것. -->
		<level value="trace" />
	</logger>

YoilTeller2.java, YoilTeller4.java

	//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());
        }
        

MyDate.java

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 + "]";
	}
	
}

yoil.jsp

year에서 myDate.year로 변경(getter이용)

<P> ${myDate.year }년 ${myDate.month }월 ${myDate.day }일은 ${yoil }입니다.</P>
profile
안녕하세요!!

0개의 댓글