안녕하세요 개발자 문문입니다.
오늘은 MVC의 요청 매핑, 커맨드 객체, 리다이렉트, 폼 태그, 모델에 대해 공부하겠습니다.
- 요청 매핑
- @RequestMapping : 메서드가 처리할 요청 경로를 지정합니다.
- @GetMapping : GET 방식의 요청 경로를 처리합니다.
- @PostMapping : POST 방식의 요청 경로를 처리합니다.
- @PutMapping : PUT 방식의 요청 경로를 처리합니다.
- @DeleteMapping : DELETE 방식의 요청 경로를 처리합니다.
- @PatchMapping : PATCH 방식의 요청 경로를 처리합니다.
| REST API | 목적 | 특징 |
| GET | 리소스 조회 | 요청 바디 없음, 쿼리스트링 사용 |
| POST | 리소스 생성 | 요청 바디에 데이터 포함 (JSON 등) |
| PUT | 리소스 전체 수정 | 기존 리소스를 완전히 덮어씀 |
| DELETE | 리소스 삭제 | 일반적으로 요청 바디 없이 URL로 대상 지정 |
| PATCH | 리소스 일부 수정 | PUT과 달리 일부 필드만 수정 |
- 요청 파라미터 접근
- http://localhost:8080/register/step2?agree=true 로 요청이 왔다고 가정하겠습니다.
1. HttpServletRequest
@GetMapping("/register/step2")
public String handleStrep2(HttpServletRequest request){
String agreeParam = request.getParameter("agree");
...
}
2. RequestParam
@GetMapping
public String handleStep2(@RequestParam(value="agree", required=true, defaultValue="false") Boolean agreeVal){
...
}
- 속성 : value(파라미터 이름) , requried(필수 여부), defaultValue(기본값)
- 리다이렉트
- 리다이렉트를 시키는 방법은 "redirect:경로"를 뷰이름으로 리턴하면 됩니다.
@GetMapping("/register/step2")
public String handleStep2Get()
{
return "redirect:/register/step1";
}
- 경로위치에 /로 시작을 안하면 상대 경로로 사용됩니다.
- 커맨드 객체
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class RegisterRequest{
private String name;
private String email;
private String password;
private String confirm;
}
@PostMapping("/register/step3")
public String handleStep3(RegisterRequest regReq){
...
}
- 이런식으로 사용하면 요청 파라미터의 값을 커맨드 객체(RegisterRequest)로 복사하고 setter 메서드로 값을 주입시킵니다.
- 클래스명이 RegisterRequest 이렇게 되어있다면, JSP에서 아래와 같이 사용 가능합니다.
- 스프링 MVC는 커맨드 객체의 클레스 이름(첫 글자 소문자로 변경)과 동일한 속성이름을 사용해서 커맨드 객체를 뷰에 전달합니다.
<p><string>${registerRequest.name}님</strong> 회원 가입이 완료되었습니다.</p>
- @ModelAttribute("속성 이름")을 사용하면 지정한 이름으로 커맨드 객체에 접근이 가능합니다.
@PostMapping("/register/step3")
public String handleStep3(@ModelAttribute("formData") RegisterRequest regReq){
...
}
- Model
- Model은 뷰에 값을 전달할 수 있는 객체입니다.
- 컨트롤러에서 model.addAttribute("greeting", "안녕하세요 ", +name); 이런식으로 사용하면, 뷰에서 ${greeting}으로 사용 할 수 있습니다.
- 위와 같이 사용하려면 컨트롤러에서 뷰이름으로 리턴해줘야 합니다.
- ModelAndView
- ModelAndView를 사용하면 뷰에 전달할 데이터 설정, 뷰 이름 리턴 이 두 과정을 한 번에 처리할 수 있습니다.
@GetMapping
public ModelAndView form(){
List<Question> questions = new createQuestions();
ModelAndView mav = new ModelAndView();
mav.addObject("questions", questions);
mav.setViewName("survey/surveyForm");
return mav;
}
'Spring 개념정리' 카테고리의 다른 글
| [Spring] MVC : 세션, 인터셉터, 쿠키 (1) | 2025.07.07 |
|---|---|
| [Spring] MVC : 메시지, 커맨드 객체 검증 (0) | 2025.07.07 |
| [Spring] 스프링 MVC 프레임워크 동작 방식 (0) | 2025.07.02 |
| [Spring] AOP(Aspect Oriented Programming) (0) | 2025.07.01 |
| [Spring] 빈 라이프사이클과 범위 (2) | 2025.06.30 |