참치코더의 꿈 메모장

Spring / @RequestParam, @ModelAttribute 사용법 정리 (코드 위주) 본문

Spring

Spring / @RequestParam, @ModelAttribute 사용법 정리 (코드 위주)

참치깡 2025. 9. 14. 13:24
728x90

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
// Http 요청 파라미터 - @RequestParam
// 스프링이 제공하는 @RequestParam을 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다.

// 방법 1.
@ResponseBody // View 조회를 무시하고, Http message body에 직접 해당 내용 입력
@RequestMapping("/request")
public String requestParam(
        @RequestParam("username"String memberName, // 파라미터 이름으로 바인딩
        @RequestParam("age"int memberAge)
{
    log.info("username={}, age={}", memberName, memberAge);
    return "ok";
}
 
// 방법 2.
@ResponseBody
@RequestMapping("/request")
public String requestParam(
        @RequestParam String username, // Http 파라미터 이름이 변수 이름과 같으면 @RequestParam("username") 생략 가능
        @RequestParam int age
){
    log.info("username={}, age={}", username, age);
    return "ok";
}
 
// 방법 3.
@ResponseBody
@RequestMapping("/request")
public String requestParam(String username, int age) { // String, int, Integer 등의 단순 타입이면 @RequestParam 도 생략 가능
    log.info("username={}, age={}", username, age);
    return "ok";    
}
 
// @RequestParam 애노테이션을 생략하면 스프링MVC는 내부에서 required=false를 적용한다.
 
 
// 파라미터 필수 여부
 
@ResponseBody
@RequestMapping("/request")
public String requestParamRequired(
    @RequestParam(required = trueString username, // 파라미터 필수 여부, 없으면 400에러 발생, 기본값이 true
    @RequestParam(required = false) Integer age
){
    log.info("username={}, age={}", username, age);
    return "ok";
}
 
// 기본 값 적용
 
@ResponseBody
@RequestMapping("/request")
public String requestParamDefault(
    @RequestParam(required = true, defaultValue = "guest"String username, //defaultValue로 기본 값 적용
    @RequestParam(required = false, defaultValue = "-1"int age ){ // defaultValue는 빈 문자의 경우에도 설정한 기본 값이 적용된다.
 
    log.info("username={}, age={}", username, age);
    return "ok";
}
 
// 파라미터를 Map으로 조회하기(전체 조회) - requestParamMap 
 
@ResponseBody
@RequestMapping("/request-param-map")
public String requestParamMap(@RequestParam Map<String, Object> paramMap){
    log.info("username={}, age={}", paramMap.get("username"), paramMap.get("age"));
return "ok";
}
 
 
// HTTP 요청 파라미터 - @ModelAttribute
 
/*
    1. MemberDTO 객체를 생성한다.
    2. 요청 파라미터의 이름으로 MemberDTO 객체의 프로퍼티를 찾고, setter 호출후 파라미터의 값을 바인딩 한다.
    3. 파라미너틔 이름이 username 이면 setUsername()메서드를 찾아서 호출하면서 값을 입력한다.
 
*/
 
// 방법 1.
@ResponseBody
@RequestMapping("/model")
public String modelAttribute(@ModelAttrubute MemberDTO member){ // MemberDTO객체 생성 & 요청 파라미터의 값도 전부 대입
    log.info("username={}, age={}", member.getUsername(), member.getAge());
    return "ok";
}
 
// 방법 2.
@ResponseBody
@RequestMapping("/model")
public String modelAttribute(MemberDTO member){ // MemberDTO객체 생성 & 요청 파라미터의 값도 전부 대입
    log.info("username={}, age={}", member.getUsername(), member.getAge());
    return "ok";
}
 
// @ModelAttribute는 생략할 수 있다.
// @RequestParam도 생략 할 수 있다. 
 
// String, int, Integer 같은 단순 타입 = @RequestParam
// 나머지 = @MapAttribute (argument resolver로 지정해둔 타입 외)
 
 
 
 
cs

 

728x90
Comments