:: 스프링 MVC의 파라미터는 기본적으로 req에 전달된 파라미터 이름을 기준으로 동작하지만 간혹 파라미터가 전달되지 않으면 문제가 발생할 수 있다.
이때 사용하는 것이 @RequestParam이다.
@RequestParam에는 defaultValue라는 속성이 있어 말 그대로 기본값을 지정할 수 있다.
public void ex02(
@Requestparam(name="name", defaultValue="AAA") String name,
@RequestParam(name="age", defaultValue="22") int age)
){...}
기본적으로 HTTP는 문자열로 데이터를 전달하기 때문에 컨트롤러는 문자열을 기준으로 특정 클래스의 객체로 처리하는 작업을 진행한다.
그렇기에 날짜 관련 타입(LocalDate, LocalDateTime, Date, etc)을 수집할 때 문제가 발생한다.
이때 Formatter를 사용한다.
Formatter는 문자열을 특정한 객체로 변환하는 경우에 사용한다.
스프링 MVC는 기본적으로 웹 MVC와 동일한 방식이므로 모델이라고 부르는 데이터를 JSP까지 전달할 필요가 있다.
순수한 servlet 방식에서는 req.setAttribute()를 이용해 JSP까지 전달했지만 스프링에서는 그 역할을 Model이 대신한다.
Model.addAttribute(name,value)
스프링 MVC의 컨트롤러는 파라미터로 getter/setter를 이용하는 Java Beans의 형식의 사용자 정의 파라미터인 경우 자동으로 화면까지 객체를 전달한다.
@GetMapping("/aa")
public void aaa(NoteDTO dto, Model model){...}
-> JSP에서 다른 처리없이 ${noteDto}를 사용할 수 있다.
${}의 변수명은 타입의 앞글자만 소문자로 처리되어 사용된다.
자동 생성된 이름이 아닌 다른 이름으로 지정해서 사용하고 싶다면 명시적으로 @ModelAttribute()를 사용해서 지정할 수 있다.
@GetMapping("bb")
public void bbb(@ModelAttribute("dto") NoteDTO noteDTO, Model model){...}
-> 이 경우 JSP에서 ${dto}와 같은 이름의 변수로 처리할 수 있다.
POST 방식으로 처리하고 Redirect해서 GET방식으로 특정 페이지로 이동하는 패턴 (PRG)을 처리하기 위해 스프링MVC에서는 RedirectAttribute라는 타입을 제공한다.
addAttribute()로 데이터를 추가하면 리다이렉트할 URL에 쿼리 스트링으로 추가되고, addFlashAttribute()를 이용하면 URL에 보이지는 않지만 JSP에서는 일회성으로 사용할 수 있다.