본문 바로가기
  • 실행력이 모든걸 결정한다
Spring Series/Spring Framework

[Spring] form 데이터 처리 방식 4가지 소개

by 김코더 김주역 2021. 1. 4.
반응형

클라이언트가 view 화면에서 <form> 태그로 데이터를 보내왔다고 하자.

그럼 이 데이터들을 Spring 컨트롤러에서 받아서 처리하면 되는데, 몇 가지 처리 방법에 대해 소개한다. 

 

예시 소스코드에서 "..."로 생략한 부분은 여러분들이 임의로 지정할 경로 혹은 임의의 작업 내용이다.

 

 

1) HttpServletRequest 클래스 사용

아래 포스팅의 2. Servlet 기본원리 - 3) HTML의 form 정보들을 Servlet에서 받는 과정 참고

kimcoder.tistory.com/190

 

[JSP Servlet] doGet / doPost / Servlet 기본 원리 / 한글 처리

※ Context Path : 웹 어플리케이션을 구분하기 위한 경로, 프로젝트 생성 시 server.xml에 자동으로 추가됨. request의 getContextPath() 메소드는 일반적으로 URL에서 프로젝트 이름 부분을 반환한다. 1. doGet,.

kimcoder.tistory.com

 

 

 

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) {...}

 

반응형

댓글