개발/Spring, Spring Data JPA, Querydsl

Spring - @RequestParam, @ModelAtttribute, WebDataBinder

잇(IT) 2023. 6. 2. 16:27
728x90

1. 사용법과 예제

우선 각각의 어노테이션의 사용법과 예제를 다루어보고, 각각을 언제 사용하면 좋을지에 대해 알아보도록 하겠습니다.

 

@RequestParam

@RequestParam 어노테이션은 사용자가 요청시 전달하는 값을 Handler(Controller)의 매개변수로 1:1 맵핑할때 사용되는 어노테이션입니다.

@Controller
public class TestController {
    @GetMapping("/")
    public String getTestPage(@RequestParam("name") String name) {
        System.out.println("이름 : " + name);
        return "test";
    }
}

예를 들어 사용자가 /?name=test 로 요청한다면, 위 핸들러의 매개변수인 name 에 "test"가 매핑됩니다.

 

@ModelAttribute

우선 @ModelAttribute는 메소드레벨, 메소드의 파라미터 두군데에 적용이 가능합니다. 하지만 이번 포스팅에서는, 메소드의 파라미터에 사용되는 경우에 대해서 다루도록 하겠습니다.

@ModelAttribute는 사용자가 요청시 전달하는 값을 오브젝트 형태로 매핑해주는 어노테이션입니다.

@Getter
@Setter
public class TestModel {
    private String name;
    private int age;
}

@RestController
public class TestController {
    @GetMapping("/")
    public String getTestPage(@ModelAttribute TestModel testModel) {
        System.out.println("이름 : " + testModel.getName());
        System.out.println("나이 : " + testModel.getAge());
        return "test";
    }
}

예를들어, name, age를 인스턴스 변수로 가지는 TestModel객체가 존재하고 이를 매개변수로 받기 위해서는 위와 같이 컨트롤러를 생성하고, /?name=JJY&age=10로 요청을 하면 각각의 값이 핸들러의 testModel 객체로 바인딩됩니다. (Setter가 존재해야 합니다.)


- RequestParam : 기본형, String (생략 가능하다.)

 

- ModelAttribute : 참조형 (생략 가능하다.)

 

- WebDataBinder

1. BindingResult 클래스를 이용한다.

2. 바인딩 할 객체 바로 뒤에 와야 한다. 

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

// MyDate 객체에 대해 타입 변환 및 데이터 검증이 필요할 때 뒤에 BindingResult 클래스를 작성해준다.

3. WebDataBinder는 1) 타입 변환 2) 데이터 검증을 한 뒤 BindingResult에 저장하고 컨트롤러에 전달하고 컨트롤러가 그 결과를 볼 수 있게 된다. 

728x90