Spring

[Spring Boot] @RequestMapping 매핑

HSRyuuu 2023. 10. 2. 21:34

@RequestMapping


메서드 위에 @RequestMapping("/url") 이 붙으면 /url이 호출 됐을 때 해당 메서드를 실행하도록 매핑한다.

해당 클래스가 @Controller로 지정되어 있다면 , 메서드가 String을 반환했을 때 반환 값은 view 이름으로 인식된다.

@RestController로 지정되어 있다면, Rest API요청에 대한 응답 (JSON)을 반환한다.


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을 기본으로 한다.

예를들어 클래스에 @RequestMapping("/board") 이 있다면,
아래와 같이, 메서드가 ("/find")로 지정되면 해당 메서드는 /board/find 에서 동작하게 된다.

//Controller에 @RequestMapping("/board") 존재

@GetMapping("/find")
public String findByWriterId(){
	//생략
	return "board/findForm";
}
위의 메서드는 /board/find라는 경로에서 GET방식으로 요청이 들어왔을 때,
resources - board폴더의 "findForm.html"이라는 View를 반환한다.

 


 

HTTP Method Mapping


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

 

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


1. GetMapping

GET API서버에서 값을 가져올 때 사용하는 API이다.

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

 

아래 예제는 /member/name/{id} URI로 GET 방식으로 요청이 왔을 때 실행되는 메서드이다.

@GetMapping("/member/name/{id}")
public String getName(@PathVariable Long id){
	String name = memberService.getName(id);
	return name;
}

 


2. PostMapping

POST API데이터베이스에 리소스를 저장할 때 사용하는 API이다.

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

보통 클라이언트가 HTTP message body로 데이터를 보내면, @RequestBody로 해당 데이터를 받아서 처리한다.

 

아래 예제는 /member/add URI로 POST 방식으로 요청이 왔을 때 실행되는 메서드이다.

또한 메시지 바디에는 AddMemberInput 데이터가 JSON 형식으로 포함되어 있다.

@PostMapping("/member/add")
public ResponseEntity<?> addMember(@RequestBody AddMemberInput input){
	MemberDto member = memberService.addMember(input);
	return ResponseEntity.ok(member);
}

 


 

3. PutMapping

PUT API는 데이터베이스에 존재하는 리소스 값을 업데이트할 때 사용하는 API이다.

POST API와  거의 동일하게 HTTP messageBody로 데이터를 보내고,

받은 값으로 수정 로직을 수행한 뒤 데이터베이스에 반영한다.

@PutMapping("/member/edit")
public ResponseEntity<?> editMember(@RequestBody EditMemberInput input){
	MemberDto member = memberService.editMember(input);
	return ResponseEntity.ok(member);
}
POST와 방식이 유사하지만 구분하는 이유는 명시적으로 이 요청의 행위를 알리기 위함이다.

 


 

4. DeleteMapping

DELETE API는 데이터베이스에 존재하는 리소스를 삭제할 때 사용하는 API이다.

 

아래 예제에서는 PathVariable로 id값을 받아 해당 멤버를 삭제하고, 삭제에 대한 결과를 응답한다.

@DeleteMapping("/member/delete/{id}")
public ResponseEntity<?> editMember(@PathVariable Long id){
	DeleteMemberResult result = memberService.deleteMember(id);
	return ResponseEntity.ok(result);
}

 


정리

GET, POST, PUT, DELETE 모두 동작 방식은 똑같다.

예를 들면 GET 매핑으로도 HTTP 메시지 바디에 데이터를 담아 보내서 해당 데이터를 저장하는 로직을 수행할 수도 있다.

그러나 그렇게 하지 않는 이유는 이 요청이 어떤 목적을 갖고 있는지 명시적으로 표현하기 위해서이다.

동작이 명확하지 않을 때는 POST로 보내면 된다고 한다.

 

조건 매핑


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" (! = )
이외에도 여러 가지 옵션을 부여할 수 있다.
반응형