requestParam, model, redirectAttribute

라이라·2023년 6월 18일
0

@RequestParam

:: 스프링 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는 문자열을 특정한 객체로 변환하는 경우에 사용한다.

Model

스프링 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}와 같은 이름의 변수로 처리할 수 있다.

RedirectAttribute

POST 방식으로 처리하고 Redirect해서 GET방식으로 특정 페이지로 이동하는 패턴 (PRG)을 처리하기 위해 스프링MVC에서는 RedirectAttribute라는 타입을 제공한다.

  • addAttribute(key, value)
    :: 리다이렉트할 때 쿼리 스트링이 되는 값을 지정한다.
  • addFlashAttribute(key, value)
    :: 일회성으로 데이터를 전달하고 삭제되는 값을 지정한다.

addAttribute()로 데이터를 추가하면 리다이렉트할 URL에 쿼리 스트링으로 추가되고, addFlashAttribute()를 이용하면 URL에 보이지는 않지만 JSP에서는 일회성으로 사용할 수 있다.

profile
혼자 보려고 올리는 용도

0개의 댓글