[Spring] MVC - Controller

zini9188·2023년 2월 21일
0

Spring

목록 보기
15/33

Controller란?

Spring MVC 구조에서 Controller는 API 계층에 속하며 클라이언트의 요청을 받고 받은 요청을 처리하여 응답으로 돌려주는 역할을 한다. Controller를 Spring Bean으로 지정하는 방법으로 아래 두 가지의 어노테이션이 존재한다.

@RestController

  • Restful 웹 서비스에서 주로 사용하는 컨트롤러이다.

  • 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드 포인트로 동작함을 정의해준다.

  • @Controller + @ResponseBody가 합쳐진 형태로 JSON 형태의 객체 데이터를 반환한다.

  • 애플리케이션 로딩 시 스프링 빈으로 등록해준다.

@Controller

  • 주로 View를 반환하기 위해 사용하는 컨트롤러이다.

  • Data를 반환하는 경우에는 @ResponseBody 어노테이션을 활용하여 JSON 형태의 데이터를 반환할 수 있다.

@RestController를 사용할 예정으로 해당 어노테이션만 다뤄보려고 한다.


@RestController 기본 구조

@RestController
@RequestMapping("/members")
public class MemberController{
}
  • @RequestMapping은 클라이언트 요청과 이를 처리하는 핸들러 메서드(Handler Method)를 매핑하는 역할을 한다.
    • 클래스 레벨에 사용하여 공통 URI를 구성한다.
    • 위의 예에서는 http://localhost/members 가 공통 URI

핸들러 메서드

핸들러 메서드는 클라이언트의 요청을 처리해주는 역할을 해준다.

메서드 레벨에서 @RequestMapping의 단축 표현으로 @PostMapping, @GetMapping, @PatchMapping, @DeleteMapping, @PutMapping과 같은 클라이언트의 요청 HTTP Method와 매치되는 애너테이션을 사용할 수 있다.

  • @GetMapping : 서버의 리소스를 조회할때 사용한다.
  • @PostMapping : 서버에 리소스를 등록(저장)할 때 사용
  • @PutMapping : 서버의 리소스를 수정할 때 사용. 리소스의 모든 정보를 수정할 때 사용한다.
  • @PatchMapping : 서버의 리소스를 수정할 때 사용. 리소스의 일부 정보만 수정할 때 사용한다.
  • @DeleteMapping : 서버의 리소스를 삭제할 때 사용.

핸들러 메서드의 파라미터 종류

@RequestParam

쿼리 파라미터, form data, x-www-form-urlencoded 등의 Servlet request Parameter를 바인딩 해야하는 경우 사용한다.

public member getMember(@RequestParam("memberId)" long memberId) {
	Member member = memberService.getMember(memberId);
    return member;
}

@RequestHeader

HTTP request header의 key/value 쌍의 데이터를 접근할 수 있도록 해주며 @PostMapping에서 주로 사용한다.

@PostMapping("/members")
public void handle(@RequestBody Member member) {
	memberService.save(member);
}

@PathVariable

@RequestMapping에 패턴 형식으로 정의된 URL의 변수에 바인딩할 수 있도록 해준다.

@GetMapping("/members/{member-id}/coffees/{coffee-id}")
public Pet getCoffee(@PathVariable("member-id") Long memberId, 
					 @PathVariable("coffee-id") Long coffeeId) {    
}

ResponseEntity

HttpEntity의 확장 클래스로 HttpStatus 상태 코드를 추가한 전체 HTTP 응답을 표현하는 클래스이다.

일반적인 방법은 new를 이용한 ResponseEntity 객체 생성이다.

@PostMapping
public ResponseEntity postMember(Member member) {
    return new ResponseEntity<>(member, HttpStatus.CREATED);
}

ResponseEntity의 static 메서드를 사용하여 HttpStatus의 사용을 생략할 수 있다.
아래는 HttpStatus.OK를 반환해주는 메서드이다.

@PostMapping
public ResponseEntity postMember(Member member) {
    return ResponseEntity.ok(member);
}
profile
백엔드를 지망하는 개발자

0개의 댓글