[Spring] @RequestMapping 매핑

HSRyuuu dev blog·2023년 4월 14일
0

@RequestMapping

메소드 위에 @RequestMapping("/url") 이 붙으면 /url이 호출됬을때 해당 메소드를 실행하도록 매핑한다. 해당 클래스가 @Controller로 지정되어 있다면 , 메소드가 String을 반환 했을 때 반환 값은 view 이름으로 인식된다.

ex1) URL 다중 설정

대부분 속성을 배열로 제공하므로 다중 설정이 가능하다.

	@RequestMapping("/hello","/hi)
    public String hello(){
        log.info("hello");
        return "ok";
    }

ex2) HTTP 메소드 매핑

@RequestMapping이 특정 HTTP 메소드 요청만 허용하도록 설정할 수 있다.

  • @RequestMapping(value = "/hello", method = RequestMethod.GET)
  • @RequestMapping(value = "/hello", method = RequestMethod.POST)

->각각 @GetMapping , @PostMapping으로 대체해서 사용할 수 있다.

ex3) 클래스단위에 설정

클래스에도 @RequestMapping Annotation을 붙일 수 있다.
이때, 클래스 아래에 모든 메소드는 기본적으로 클래스단위의 @RequestMapping을 기본으로 한다.

예를들어 class에 @RequestMapping("/board") Annotation이 있다면,
아래와 같은 메소드가 있을 때 해당 메소드는 /board/find 에서 동작하게 된다.

@GetMapping("/find")
public String findByWriterId(){
	//생략
	return "board/findForm";
}

위의 메소드는 /board/find라는 경로에서 Get방식으로 요청이 들어왔을때,
board폴더의 "findForm.html" 이라는 View를 반환한다.


HTTP Method Mapping

@RequestMapping(value = "/URL경로", method = RequestMethod.Get) 을 축약해서 사용할 수 있다.

@GetMapping / @PostMapping / @PutMapping /@DeleteMapping /@PatchMapping

1. GetMapping

해당 URL에 Get 요청을 하면 해당 메소드가 실행된다.

아래 예제는 localhost:8080/board URL에 대해서, Get요청이 왔을때 실행되는 메소드이다.

로직을 실행 한 뒤, templates/board/board.html의 경로를 가진 View를 호출한다.

    @GetMapping("/board")
    public String boardHome(Model model){
        List<Post> posts = postRepository.findAll();
        
        model.addAttribute("posts",posts);
        
        return "board/board";
    }

model.addAttribute("posts",posts); 는 model에 posts라는 객체를 담아서,
board.html을 호출한다.
view에서 그 객체를 "posts" 로 인식한다. 그럼 view에서는 "posts"라는 이름으로 넘어온 객체의 값들을 활용해서 화면을 랜더링 할것이다.

2. PostMapping

해당 URL에서 POST 요청을 하면 해당 메소드가 실행된다.

아래 예제는 localhost:8080/board URL에서 어떤 정보를 입력한 뒤
POST방식의 요청이 왔을때 실행되는 메소드이다.

/board 에서 입력받은 정보는@RequestParam 또는 @ModelAttribute(객체)로 받아서 사용할 수 있다.

@PostMapping("/board")
    public String findBoard(@ModelAttribute("form") Form form, Model model){
		//form을 사용하여 처리 (생략)
        return "redirect:/board/find";
    }

/board/find url view를 호출한다. ( @GetMapping("/board/find"))를 찾아서 실행한다.


조건 매핑

Request의 조건에 따라 호출을 다르게 하도록 설정할 수 있다.

1. 특정 파라미터 조건 매핑

URL에 특정 파라미터가 존재할때만 호출되도록 매핑한다.

아래 예제는 /mapping-param?mode=debug같이 mode=debug가 존재할때만 호출된다.

    @GetMapping(value = "/mapping-param", params = "mode=debug")
    public String mappingParam() {
        log.info("mappingParam");
        return "ok";
    }
  • params="mode",
  • params="!mode"
  • params="mode=debug"
  • params="mode!=debug" (! = )
  • params = {"mode=debug","data=good"}

2. 특정 헤더로 추가 매핑

Request 헤더에 특정 조건이 존재할때만 호출되도록 매핑한다.

아래 예제는 /mapping-header로 요청이 왔을 때, 헤더에 mode=debug가 존재할때만 호출된다.

    @GetMapping(value = "/mapping-header", headers = "mode=debug")
    public String mappingHeader() {
        log.info("mappingHeader");
        return "ok";
    }
  • headers="mode",
  • headers="!mode"
  • headers="mode=debug"
  • headers="mode!=debug" (! = )

(참고)김영한님 인프런 Spring MVC-2
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2

profile
Exciting dev life / 댓글, 피드백, 질문 환영합니다 !!!

0개의 댓글