본문 바로가기
Spring

[Spring] @RequestParam과 @ModelAttribute

by eunoo 2022. 8. 4.

컨트롤러 매개변수 앞에 붙일 수 있는 애노테이션은 두 가지가 있다. 이 애노테이션은 HTTP 요청 파라미터와 매개변수를 연결해주는 역할을 한다.

 

@RequestParam 

매개변수 타입이 String, 기본형일 경우 HTTP 요청 파라미터와 연결할 매개변수 앞에 작성하는 애노테이션

매개변수 타입이 String, 기본형일 때 생략되어있음.

 

속성

- name : 파라미터 이름, 생략 시 매개변수 이름과 동일

- required : 파라미터 필수 여부 (true/ false),  생략 시 디폴트는 true

- defaultValue : 파라미터 디폴트 값 지정

 

@RequestMapping("/rp")
public String main(@RequestParam(name="year", required=true) int year){

    return "yoil";
}

required= true 일 때, 파라미터 값을 반드시 줘야하므로 클라이언트가 잘못된 값을 전달할 경우를 대비하여 예외처리 해줘야함.

 

@GetMapping("/rp")
public String main(@RequestParam(name="year",required=false, defaultValue="1") int year){

    return "yoil";
}

required=false 일때, 클라이언트가 값을 전달하지 않을 때를 대비하여 defaultValue로 디폴트값 지정해줘야함.

 

@ModelAttribute

매개변수를 Model 속성으로 자동 추가해주는 애노테이션. 매개변수, 반환 타입에 적용 가능함.

매개변수 타입이 참조형일 때 생략되어있음.

 @RequestMapping("/getYoil")
    //                  @ModelAttribute("myDate")와 같음
    public String main(@ModelAttribute MyDate date, Model m){
        char yoil=getYoil(date)
        
        //m.addAttribute("myDate",date);
        //m.addAttribute("yiol",yoil);
        return "yoil";
    }

    private @ModelAttribute("yoil") char getYoil(MyDate date){
        Calendar cal = Calendar.getInstance();
        cal.set(date.getYear(),date.getMonth() - 1,date.getDay());

        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        return " 일월화수목금토".charAt(dayOfWeek);
    }

 

date를 모델 속성에 추가하는 코드 생략 가능.

 

 

 

WebDataBinder

WebDataBinder에서 하는 역할은 두 가지다. 타입 변환과 데이터 검증.

1. 타입변환

 String인 year을 int로 변환하여 그 결과값을 BindingResult에 저장

 

2. 데이터 검증

데이터가 유효한지 검증한 후 BindingResult에 저장.

 

BindingReuslt를 컨트롤러에 전달하고 바인딩할 객체 뒤에 BindingResult를 작성하여 그 결과값을 볼 수 있음.

@RequestMapping("/getYoil")
public String main(@ModelAttribute MyDate date, BindingResult result){}

댓글