티스토리 뷰

 

 

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함