본문 바로가기
IT/Spring

@ModelAttribute, @RequestParam, @RequestBody, request.getParameter(), request.getAttribute()

by 최고영회 2018. 9. 20.
728x90
반응형
SMALL

Controller 에서 parameter를 받는 방법은 다양하다. 

httpServletRequset.getParameter(), 아주 일반적인 방법이다.
@RequestMapping("/test")
public String test(HttpServletRequest req) {
    String userId = req.getParameter("userId");
    return "test";
}


httpServletRequest.getAttribute(), getParameter() 와 비슷하다. 

getParameter()는 String을 처리하며 getAttribute는 Object 를 처리한다.

<%@ page limport="com.yhkim.study.vo.UserDto" %>
<%
    UserDto user = (UserDto)request.getAttribute("user");
    String userId = user.getUserId();
%>

@RequestParam
name, required, defaultValue 라는 속성을 가지고 있다. 
required 값이 true 일 경우 해당 parameter는 반드시 request에 담겨져 있어야 한다. (없을 경우 400 에러 발생)
@RequestMapping("/test")
public String test(@RequestParam(value="userId", defaultValue="yhkim") String userId) {
    return "test";
}

간단하게 아래와 같이 사용할 수도 있다. 

이렇게 할 경우 required는 false 가 되며 변수명과 동일한 파라미터만 받을수 있게 되며, defaultVal 은 설정할 수 없다.

@RequestMapping("/test")
public String test(String userId) {
    return "test";
}


@RequestBody GET 방식은 Request Packet에 Body 가 존재하지 않기 때문에 @RequestBody로 받으려면 반드시 POST 여야 한다. 
JSON이나 XML같은 데이터를 적절한 messageConverter로 읽을때 또는 DTO/VO 객체 전체로 받을경우 사용한다.
@RequestMapping("/test")
@Slf4j
public String test(@RequestBody UserDto user) {
    log.info(user.getUserId());
    return "test";
}


@ModelAttribute @RequestParam과 비슷한데 1:1로 parameter를 받을경우 @RequestParam을 사용하고, DTO/VO로 받을경우 
@ModelAttribute로 받을 수 있다. validation작업을 추가로 할수 있다. 
받아오고자 하는 데이터의 이름을 지정하여 해당 데이터만 가져오고자 할 때 사용할 수 있다.
@RequestMapping("/test")
@Slf4j
public String test(@ModelAttribute UserDto user, @RequestParam(value="anotherParam", defaultValue="") String anotherParam) {
    log.info(user.getUserId());
    log.info("another paraemter is {}", anotherParam);
    return "test";
}

상황에 따라 적당한 방법으로 parameter 를 받아 처리하면 된다. 
Ajax로 객체배열을 넘기고자 할 때 @ModelAttribute 로 받을 수도 있고(객체 안에 List로 Type의 변수로 가지고 있을 경우) 
@RequestBody로 받을 수도 있다. (JSON.stringify()를 이용해 배열형태로 받기)
어떻게 받아서 처리하고 싶은지 잘 선택해서 하자. 




728x90
반응형
LIST