Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JVM
- 웹어플리케이션 서버
- with recursive
- 백준 16236
- spring security
- spring oauth
- 백준 17779
- JPA
- 백준 파이썬
- java
- Kotlin
- springboot
- spring cloud
- 백준 17626
- 백준 16719
- sql 기술면접
- Coroutine
- MySQL
- 백준 15685
- 백준 19238
- Spring
- 파이썬
- Spring Boot
- 백준 16235
- re.split
- 프로그래머스
- java 기술면접
- MSA
- 백준
- 프로래머스
Archives
- Today
- Total
시작이 반
[Spring] 커맨드 객체, @ModelAttribute 본문
SMALL
커맨드 객체
커맨드 객체(Command Object) 란 HttpServletRequest 를 통해 들어온 요청 파라미터들을 setter 메서드를 이용하여 객체에 정의되어있는 속성에 바인딩이 되는 객체를 의미
커맨드 객체는 보통 VO 나 DTO 를 의미하며, HttpServletRequest 로 받아오는 요청 파라미터의 key 값과 동일한 이름의 속성들과 setter 메서드를 가지고 있어야 합니다.
@Getter @Setter
public class User {
private String userName;
private String phone;
private int age;
}
@PostMapping("/test")
public String ins(User user, Model model) {
String name = user.getUserName();
String phone = user.getPhone();
int age = user.getAge();
// user 파라미터를 model 에 담는다.
model.addAttribute("user", user);
return "test";
}
@ModelAttribute
@ModelAttribute 는 메소드에 쓰이는 경우와 파라미터에 쓰이는 경우가 있다.
@ModelAttribute 의 기능중 하나는 커맨드 객체와 같이 요청 파라미터들을 객체 프로퍼티에 바인딩 시켜주는것
파라미터에 사용되는 경우
@PostMapping("/test")
public String ins(@ModelAttribute User user, Model model) {
String name = user.getUserName();
String phone = user.getPhone();
int age = user.getAge();
// user 객체를 모델에 담는 코드를 작성하지 않아도, 담겨져 있다.
// 내부적으로 model.addAttribute("user", user); 로 담는다.
// 만약 객체명과 변수명이 @ModelAttribute UserVo user 로 되어있는 경우에는 어떻게 담길까?
// 클래스명을 기준으로 카멜케이스를 적용하여 model.addAttribute("userVo", user); 로 담는다.
return "test";
}
메소드 위에 사용되는 경우
/**
* @ModelAttribute 메서드가 먼저 동작하기 때문에,
* 다른 핸들러 메서드에서 model 에 담겨져있는 user 키값을 이용하여 user 객체를 꺼내서 쓸 수 있다.
*/
@ModelAttribute("user")
public String initUser() {
// 내부적으로 model.addAttribute("user", userService.findUser(FIRST_USER_SEQ)); 형태로 담는다.
return userService.findUser(FIRST_USER_SEQ);
}
해당 컨트롤러 내의 어떠한 핸들러 메소드들보다 먼저 동작하게 된다.
-> 여러 핸들러 메소드에서 공통으로 쓰일수 있다.
참고
LIST
'Programming > Spring' 카테고리의 다른 글
[Spring] 스프링 시큐리티 로그인 (0) | 2021.02.14 |
---|---|
[Spring] CSRF, XSS (0) | 2021.02.11 |
[Spring] RestTemplate (Content-Type에러) (2) | 2021.02.01 |
[Spring] @Controller @Service @Repository (0) | 2021.01.29 |
[Spring] 네이버 검색 API 사용 (0) | 2021.01.25 |