JVM/Java

[Java] Spring Controller 파라미터 값 가져오기(HttpServletRequest, @RequestParam, @RequestBody, @ModelAttribute)

헹창 2020. 1. 28.
반응형

[Java] Spring Controller 파라미터 값 가져오기 (HttpServletRequest, @RequestParam, @RequestBody, @ModelAttribute)

 

 

일반적인 웹 프로젝트 구성에서 Controller 레벨에서 응답을 받고 비지니스 로직을 처리한 후에 다시 View 레벨로 넘어간다.

 

이 부분에서 파라미터를 어떻게 받고 어떻게 넘기는지에 대한 방법을 정리하고자 한다.

 

 

HttpServletRequest.getParameter()

 

아래소스처럼 HttpServletRequest의 getParameter() 메서드를 이용하여 파라미터 값을 가져올 수 있다.

이때  parameter로 보낸 변수명과 getParameter("변수명") 에 들어갈 변수명이 일치해야한다.

 

@RequestMapping("/main.do")
public String main(HttpServletRequest request) {
	String id = request.getParameter("id");
	System.out.prinln(id);
	return "main";
}

 

 

@RequestParam

 

@RequestParam 어노테이션을 이용하여 파라미터값을 가져오는 방법이다.

이름 타입 설명
name, value (Alias for name) String 파라미터 이름
required bollean 해당 파라미터의 필수 여부, 기본값 true
defaultValue String 해당 파라미터 기본값

 

위 옵션값들을 조합하여 컨트롤러 메서드에 적용하면 request 파라미터값을 가져올 수 있다. 가장 기본적으로는 파라미터 이름 value 옵션만으로도 사용 가능하다.

 

@RequestMapping("/main.do")
public String main(@RequestParam(value="id", defaultValue="haenny") String id) {
	System.out.prinln(id);
	return "main";
}

 

만약, required 값을 true로 해놓고 (필수 파라미터 설정) 해당 파라미터를 사용하지 않고 요청을 보내게 되면 HTTP 400 에러를 받게 된다.

 

물론 컨트롤러의 메서드에서 해당 어노테이션을 사용하지 않고, 아래 코드처럼 파라미터값을 바로 받을 수 있다. 이 경우는 필수 파라미터값이 false로 설정이 되고, 변수명과 동일한 파라미터값만 받을 수 있게 되며 기본값 설정을 할 수는 없다.

 

@RequestMapping("/main.do")
public String main(String id){
	System.out.prinln(id);
	return main;
}

 

 

@RequestBody

 

@RequestBody 어노테이션을 사용할 경우 반드시 POST 형식으로 응답받는 구조여야한다. 이를테면 JSON이나 XML같은 데이터를 읽을 때 사용한다.

 

@PostMapping("/main.do")
public String main(@RequestBody UserVO user) {
	System.out.prinln(user.getId());
	return "main";
}

 

- UserVO 객체

@Data
public Class UserVO {
	private String id;
	private String pw;
	private String name;
}

참고로 Lombok이 설치된 경우 @Data를 사용하면 되고, 그렇지 않은 경우 getter, setter 메서드를 만들어주면 된다.

 

 

@ModelAttribute

 

@RequestParam 과 비슷한데 1:1로 파라미터를 받을 경우에는 @RequestParam, 도메인이나 오브젝트로 파라미터를 받을 경우는 @ModelAttribute으로 받을 수 있다.

 

또한 이 어노테이션을 사용하면 Null 체크 등의 검증(Validation)작업을 추가로 할 수 있다. 각 멤버변수마다 valid옵션을 줄 수가 있고, 여기서 에러가 날 경우 BindExeption이 발생한다.

 

@PostMapping("/main.do")
public String main(@ModelAttribute("user") UserVO user) {
	System.out.prinln(user.getId());
	return "main";
}

 

여기서 JSP파일에 전달하는 Model 객체에 @ModelAttribute("user") 의 user로 표현되는 UserVO 객체의 데이터를 넘겨줄 수 있다.

 

JSP에서는 다음과 같이 사용가능하다.

 

var id = '${user.id}';
var pw = '${user.pw}';
var name = '${user.name}';

 

 

 

728x90
반응형

댓글

추천 글