클라이언트가 view 화면에서 <form> 태그로 데이터를 보내왔다고 하자.
그럼 이 데이터들을 Spring 컨트롤러에서 받아서 처리하면 되는데, 몇 가지 처리 방법에 대해 소개한다.
예시 소스코드에서 "..."로 생략한 부분은 여러분들이 임의로 지정할 경로 혹은 임의의 작업 내용이다.
1) HttpServletRequest 클래스 사용
아래 포스팅의 2. Servlet 기본원리 - 3) HTML의 form 정보들을 Servlet에서 받는 과정 참고
2) @RequestParam Annotation 사용
Parameter 형식 : @RequestParam("속성명") 자료형 변수
예시
@RequestMapping("...")
public String method(@RequestParam("id") int id, @RequestParam("pw") String pw, Model model) {...}
요청 파라미터의 이름과 메소드 파라미터의 이름이 일치한다면 @RequestParam의 속성을 생략할 수도 있다.
@RequestParam String pw
3) 데이터 객체 사용
2)의 방법은 전송받을 form 데이터가 많을 경우에 코드가 매우 길어지는데, 이 단점을 보완하기 위한 방법이다.
데이터 객체를 Parameter로 정해주면 전송 받은 데이터들이 자동으로 이 객체에 담기게 되는데, 요청 파라미터의 속성 이름과 데이터 객체의 멤버 변수명을 일치 시켜줘야 매칭이 정상적으로 이루어진다.
Model 객체에 속성을 추가 하지 않아도 다음 View 페이지에 데이터 객체를 전달할 수 있으며, 뷰에서는 전송 받은 데이터 객체의 private 속성도 ${객체.속성} 형식으로 접근 할 수 있다.
@RequestMapping("...")
public String method(User user) {...}
추가로 @ModelAttribute 어노테이션을 활용하여 뷰에서 사용할 데이터 객체의 이름을 지정할 수 있다.
아래 예시에서는 jsp에서는 ${user.속성} 대신 ${player.속성}을 사용할 수 있게 된다.
@RequestMapping("...")
public String method(@ModelAttribute("player") User user) {...}
4) @RequestParam + Map<String, String> 사용
모든 요청 파라미터를 맵에 담아서 전달받을 수 있다. 요청 필드의 이름과 값은 모두 String으로 전달받는다.
form에서 받는 정보가 특정 도메인 오브젝트에 매핑되지 않는 특별한 정보인 경우에 이 방법을 사용할 수 있다.
@RequestMapping(value="/user/edit" method=RequestMethod.POST)
public String method(@RequestParam Map<String, String> userMap) {...}
'Spring Series > Spring Framework' 카테고리의 다른 글
[Spring] Validator로 form 데이터 검증하기 (0) | 2021.01.06 |
---|---|
[Spring] Controller에서 redirect하기 (0) | 2021.01.05 |
[Spring] Mysql 데이터베이스 연동하기 (0) | 2021.01.03 |
[Spring] @Controller 보충 설명 (0) | 2021.01.01 |
[Spring] MVC 프로젝트 구조 파악하기 (2) | 2020.12.31 |
댓글