티스토리 뷰

반응형

request를 받는 controller를 만들어보자

 

가장 초기의 형태로는 직접 request, response 객체를 받는 방법이다.

@RequestMapping("/requset-param-v1")
public void requestParamV1(HttpServletRequest request, HttpServletResponse response) throws IOException{
    String username = request.getParameter("username");
    int age = Integer.parseInt(request.getParameter("age"));

    log.info("username={}, age={}", username, age);

    response.getWriter().write("ok");
}

스프링은 이를 @RequestParam이라는 어노테이션을 통해서 직접 request 변수를 받을 수 있다.

@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV2(
        @RequestParam("username") String memberName,
        @RequestParam("age") int memberAge){
    log.info("username={}, age={}", memberName, memberAge);

    return "ok";
}

@RequestParam에 들어가는 변수의 이름은 request로 요청받은 변수이름으로 해주면 매칭이 된다.

@ResponseBody는 return값을 직접 화면에 뿌려주는 역할을 한다. class에 @RestController를 붙혀줬다면 생략해도 무방하다.

 

또한, @RequestParam의 변수와 method의 변수명이 같다면 다음과 같이 생략이 가능하다.

@ResponseBody 
@RequestMapping("/request-param-v3")
public String requestParamV3(
        @RequestParam String username,
        @RequestParam int age){
    log.info("username={}, age={}", username, age);

    return "ok";
}
마지막으로 @RequsetParam도 생략이 가능하나, 가독성으로 인해 비추천한다고 한다.
@RequestParam
required = [true / false] : request 요청시 꼭 넣어줘야하는 변수인지 아닌지.
defaultValue = " " : 요청 변수가 없을 시에 default로 들어가게 되는 값.

다음과 같이 하나하나 변수를 지정해서 받아줄 수 있지만, Map 자료형을 통해서 요청이 오는 모든 변수를 받아줄 수도 있다.

@ResponseBody 
@RequestMapping("/request-attribute-v1-temp")
public String modelAttributeV1Temp(@RequestParam String username, @RequestParam int age){
    HelloData helloData = new HelloData();
    helloData.setAge(age);
    helloData.setUsername(username);

    log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    log.info("helloData={}", helloData);
    return "ok";
}

 

마지막으로 가장 많이 사용하게 되는 형식인데, 요청변수로 오는 객체를 만들어서 넣어주는 것이다.

이때는 @ModelAttribute 어노테이션을 쓰게 된다.

ModelAttribute를 사용하게 되면 해당 객체에서 getter, setter를 찾아 값을 삽입해주게 된다.

따라서 사용자가 따로 객체에 값을 넣어줄 필요가 없다.

 

@ResponseBody 
@RequestMapping("/request-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData){
    log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    log.info("helloData={}", helloData);
    return "ok";
}

// ModelAttribute는 생략가능하다.
// 단순한 타입: RequestParam, 다른 타입: ModelAttribute로 번역
@ResponseBody 
@RequestMapping("/request-attribute-v2")
public String modelAttributeV2(HelloData helloData){
    log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    log.info("helloData={}", helloData);
    return "ok";
}
728x90
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
250x250