티스토리 뷰
Mapping이란?
-클라이언트로 부터 요청이 들어오는 URL과 컨트롤러 메서드를 연결하는 작업입니다. 이를 통해 클라이언트의 요청이 URL로 들어올 때 해당 URL에 맞는 컨트롤러가 있는지 확인하고 해당 컨트롤러를 매핑하여 해당 요청을 처리합니다.이를 구현하기 위해선 Mapping 애노테이션이 필요합니다.
@RequestMapping
-스프링에서 클랄이언트 요청 URL과 클래스,메서드를 매핑하기 위해 사용되는 애노테이션입니다. 이는 여러 종류(get,post,put,delete,patch)의 URL을 다 포함하고 있으며, 옵션을 통해 종류를 지정할 수도 있는 애노테이션입니다.
@Controller
public class ProductController {
@RequestMapping("/products")
public String listProducts() {
// 상품 목록을 보여주는 로직
return "product-list";
}
}
위의 코드를 보시면, @RequestMapping("/products")라는 애노테이션이 있습니다. 이는 사용자로부터 /product 요청이 들어오면 listProducts()메서드를 실행해 요청을 수행합니다.
(이때, 따로 옵션을 사용하지않으면 get,post,put,delete,patch URL이 다 매핑됩니다.)
@Controller
public class ProductController {
@RequestMapping(value = "/products", method = RequestMethod.GET)
public String listProducts() {
// 상품 목록을 보여주는 로직
return "product-list";
}
@RequestMapping(value = "/products", method = RequestMethod.POST)
public String addProduct() {
// 상품 추가 로직
return "product-added";
}
}
위의 코드와 같이 @RequestMapping애노테이션의 옵션을 사용해 요청 메서드를 설정할 수 있습니다.
listProducts()메서드는 GET요청이 들어왔을때만 받고,
addProduct()메서드는 POST요청이 들어왔을때만 받습니다.
GetMapping
-Get요청만 받는 애노테이션으로 @RequestMapping에서 GET옵션을 설정한 것과 같은 효과를 가집니다.
즉, @GetMapping == @RequestMapping(method = RequestMethod.GET) 입니다.
@Controller
public class ProductController {
@GetMapping("/products")
public String listProducts() {
// 상품 목록을 보여주는 로직
return "product-list";
}
}
PostMapping
-Get요청만 받는 애노테이션으로 @RequestMapping에서 POST옵션을 설정한 것과 같은 효과를 가집니다.
즉, @PostMapping == @RequestMapping(method = RequestMethod.POST) 입니다.
@Controller
public class ProductController {
@PostMapping("/products")
public String addProduct() {
// 상품 추가 로직
return "product-added";
}
}
PutMapping
-Put요청만 받는 애노테이션으로 @RequestMapping에서 PUT옵션을 설정한 것과 같은 효과를 가집니다.
즉, @PutMapping == @RequestMapping(method = RequestMethod.PUT) 입니다.
@Controller
public class ProductController {
@PutMapping("/products/{id}")
public String updateProduct(@PathVariable("id") Long id, @RequestBody Product product) {
// 상품 업데이트 로직
return "product-updated";
}
}
DeleteMapping
-Delete요청만 받는 애노테이션으로 @RequestMapping에서 DELETE옵션을 설정한 것과 같은 효과를 가집니다.
즉, @DeleteMapping == @RequestMapping(method = RequestMethod.DELETE) 입니다.
@Controller
public class ProductController {
@DeleteMapping("/products/{id}")
public String deleteProduct(@PathVariable("id") Long id) {
// 상품 삭제 로직
return "product-deleted";
}
}
PatchMapping
-Patch요청만 받는 애노테이션으로 @RequestMapping에서 PATCH옵션을 설정한 것과 같은 효과를 가집니다.
즉, @PatchMapping == @RequestMapping(method = RequestMethod.PATCH) 입니다.
@Controller
public class ProductController {
@PatchMapping("/products/{id}")
public String updateProduct(@PathVariable("id") Long id, @RequestBody Product product) {
// 상품 업데이트 로직
return "product-updated";
}
}
스프링에서 데이터 받기
- @RequestParam
-HTTP 요청에서 쿼리 파라미터(Query Parameter)값을 받아 오는데 사용되는 애노테이션입니다.
URL 뒤에 '?'를 사용하여 요청되는 파라미터들을 가져올 수 있습니다.
RequestParam의 속성에는 value , required , defaultValue가 있습니다.
속성 | 타입 | 설명 |
Value | String | HTTP 요청 파라미터의 이름을 지정함 |
Required | Boolean | 파라미터 필수 여부를 지정함. true = 해당 요청 파라미터의 값이 존재하지 않을 시 에러 발생, false = 해당 요청 파라미터의 값이 존재하지 않아도 넘어감. (기본값 = true) |
DefaultValue | String | 요청 파라미터가 값이 없을 때 대신 사용할 문자열 값을 지정함. (기본값 = X) |
http://example.com/products?id=123&name=example 받아오는 예시코드
@GetMapping("/products")
public String handleRequest(@RequestParam("id") String id, @RequestParam("name") String name) {
return "result";
}
- @PathVariable
-HTTP요청에서 URL에 포함된 경로 변수(Path Variable)값을 받아 오는데 사용되는 애노테이션입니다.
URL 경로에 동적으로 포함되는 값을 하나 가져올 수 있습니다.
PathVariable의 속성에는 value, required가 있습니다.
속성 | 타입 | 설명 |
Value | String | 경로 변수의 이름을 지정함. |
Required | Boolean | 경로 변수가 필수적인지를 지정함. true = 해당 요청 파라미터의 값이 존재하지 않을 시 에러 발생, false = 해당 요청 파라미터의 값이 존재하지 않아도 넘어감. (기본값 = true) |
http://example.com/products/123 받아오는 예시코드
@GetMapping("/example/{id}")
public String handleRequest(@PathVariable("id") String id) {
return "result";
}
- @ModelAttribute
-HTTP바디에 포함되어있는 폼 데이터를 받아 오는데 사용되는 애노테이션입니다.
HTML 폼데이터를 자바 객체로 변환하는 데에 활용합니다.
해당 애노테이션은 생략이 가능하며, 생략을 해도 동일한 효과를 가질 수 있습니다.
@ModelAttribute("이름")옵션으로 이름을 설정할 수 있습니다.
name=John&age=30&email=john@example.com HTTP BODY 받아오는 예시코드
@PostMapping("/example")
public String handleFormSubmission(@ModelAttribute MyFormObject formObject) {
String name = formObject.getName();
int age = formObject.getAge();
String email = formObject.getEmail();
return "result";
}
- @RequestBody
-HTTP바디에 포함되어있는 데이터를 받아오는데 사용되는 애노테이션입니다.
보통 HTML BODY에 포함된 JSON 데이터를 받아가지고 옵니다.
해당 애노테이션은 생략이 불가능합니다.
{ "name": "John", "age": 30, "email": "john@example.com" } HTTP BODY 받아오는 예시코드
@PostMapping("/example")
public String handleRequest(@RequestBody MyDataObject dataObject) {
String name = dataObject.getName();
int age = dataObject.getAge();
String email = dataObject.getEmail();
return "result";
}
커맨드 객체
-웹 애플리케이션에서 폼데이터, JSON데이터를 전달하고 받아 처리하기 위해 사용 되는 객체입니다.
클라이언트 입력과 연결 가능하고, 출력할때도 연결이 가능합니다.
커맨드 객체의 변수들은 클라이언트의 입력 필드의 이름과 동일해야 합니다.
즉, 스프링 MVC에서 HTTP 로 넘어오는 모든 이름들을 인식해 객체에 동일한 이름의 변수가 있으면 넣습니다.\
Model 인터페이스
-스프링 MVC에서 컨트롤러와 뷰 사이의 데이터 전달을 담당하는 인터페이스입니다.
컨트롤러에서 모델에 데이터를 추가할때 뷰로 전달되어 사용됩니다.
컨트롤러의 파라미터로 선언하여 사용가능합니다.
addAttribute 메서드를 사용해 추가할 수 있습니다.
@Controller
public class MyController {
@RequestMapping("/example")
public String handleRequest(MyFormObject formObject, Model model) { //커맨드 객체 , model 인터페이스
String name = dataObject.getName();
int age = dataObject.getAge();
String email = dataObject.getEmail();
model.addAttribute("form", formObject);
// 모델에 커맨드 객체 추가 -> 뷰로 전달함.
return "my-view";
// JSP로 포워딩 또는 리다이렉션
}
}
ModelAndView
-Model과View를 한번에 설정할 수있는 객체입니다.
Model 데이터와 View의 이름을 함께포함하여 컨트롤러에 처리한 결과를 뷰에 전달가능합니다.
@Controller
public class MyController {
@RequestMapping("/example")
public ModelAndView handleRequest(MyFormObject formObject) {
String name = formObject.getName();
int age = formObject.getAge();
String email = formObject.getEmail();
ModelAndView modelAndView = new ModelAndView("my-view"); //ModelAndView 생성
modelAndView.addObject("form", formObject);
// 커맨드 객체 추가
return modelAndView;
// ModelAndView 반환
}
}
RequestParam( 속성 => value , required , defaultValue)
redirect(리다이렉트)
HttpServletRequest -> 커맨드 객체로 간편
@ModelAttribute
Model
ModelAndView
'자바 > 스프링' 카테고리의 다른 글
자바 스프링 테스트 (0) | 2023.07.02 |
---|---|
HTTP 데이터 삽입 방법 (0) | 2023.07.01 |
빈 라이프사이클 및 스코프 (0) | 2023.06.27 |
@Autowired 자동주입 (0) | 2023.06.26 |
빈(Bean) 등록 심화 (0) | 2023.06.26 |