[SPRING] @Controller, @RestController, @RequestMapping, @PathValue

wannabeing·2025년 3월 20일
0

SPARTA-TIL

목록 보기
6/22
post-thumbnail

Spring에서 Controller(Handler)를 만들 때 사용하는 어노테이션을 잡아보자.

@Controller

@Controller
public class ViewController {

    @RequestMapping("/login")
    public String example() {
        return "login"; // ViewName이 return
    }

}
  • View가 있는 경우에 사용하는 어노테이션이다.
  • return 값이 String일 경우, ViewName(파일이름)으로 인식한다.
  • View의 기본경로: main/resources/templates

💡 템플릿 엔진?

템플릿 엔진은 지정된 템플릿 양식과 데이터가 합쳐져서 HTML 문서를 출력하는 소프트웨어를 말한다. 서버 사이드, 클라이언트 사이드로 나뉘는데
대표적인 서버 사이드 엔진으로 JSP, 타임리프(Thymeleaf)가 있다.


@RestController

@RestController
public class ResponseController {

    @RequestMapping("/rest")
    public String example() {
        return "rest"; // String Data가 반환된다.
    }
    
}
  • 응답할 데이터가 있는 경우 사용하는 어노테이션이다.
  • return 값으로 HTTP Message Body에 Data를 입력한다.

@RequestMapping

// 1. RestController
@RestController
public class RequestMappingController {

	// 2-1. "/request"라는 URL로 요청이 들어왔을 경우
    // 2-2. HTTP 메소드는 GET만 허용
    @RequestMapping(value = "/request", method = RequestMethod.GET)
    public String exampleRequest() {
    	// 3. 응답
        return "this is request!";
    }

}
  • 클라이언트 요청이 왔을 때, Controller 메서드와 연결하기 위해 사용한다.
  • URL을 매핑할 때 배열 형태로 다중 매핑이 가능하다.
    아래와 같이 작성하면, 3개의 URL에 응답하는 메서드로 활용할 수 있다.
    @RequestMapping({"/example", "/example2", "/example3"})
  • method 속성으로 허용할 HTTP 메소드를 지정할 수 있다.
  • value 속성은 생략 가능하다.
    @RequestMapping("request")

💡 Restful하게 사용할 수도 있다!

@PostMapping, @PutMapping, @DeleteMapping, @PatchMapping

	// ✅ PostMapping 예시
	@PostMapping("/request")
    	public String exampleRequest() {
        	return "this is request!";
    	}
  • 모두 RequestMapping 과 같은 구조를 갖고 있다.
  • 메서드 레벨에서만 작성이 가능한 어노테이션이다.

❓ 그럼 RequestMapping은 언제 쓸까?

  • prefix로 선언할 URL을 클래스 레벨에 적용할 때, 사용한다.
  • users/list
    위와 같은 URL이 있을 때, users가 prefix가 된다.
@RequestMapping("/users")
@RestController
public class RequestMappingController {
	
    @GetMapping("/v1")
	public String example() {
		return "/users/v1 입니다!";
	}
    @GetMapping("/v2")
	public String example() {
		return "/users/v2 입니다!";
	}
}

@PathValue

  • URL로 전달된 값을 파라미터로 받아오는 역할을 하는 어노테이션이다.
  • 설정된 값은 반드시 가져야되며, 없을 경우 404에러가 발생한다.
// ✅ 1-1. 클래스 레벨에서의 RequestMapping
// ✅ 1-2. RestController: 데이터를 반환하는 컨트롤러
@RequestMapping("/users")
@RestController
public class PathVariableController {
	
	// ✅ 2. HTTP 메소드는 GET 요청만 허용
	@GetMapping("/{postId}")
    // ✅ 3. PathVariable로 파라미터 변수 postId 받기
	public String getPostId(@PathVariable Long postId) {
		String result = "id는 다음과 같습니다 : " + postId;
		return result;
	}
}

특정 파라미터에만 응답하게 해보자!

// ✅ 데이터를 반환하는 컨트롤러
@RestController
public class ParameterController {
    // ✅ HTTP 메소드는 GET만 허용
    // ✅ URL은 /users 일 경우
    // ✅ gender라는 파라미터의 값이 mand일 경우에만 !!
    @GetMapping(value = "/users", params = "gender=man")
    public String params() {
        String result = "남자시군요";
        return result;
    }

  • 허용하지 않은 요청일 경우, 400 Bad Request 에러를 반환한다.
  • 속성 작성 규칙
    params=!gender: gender가 없어야 된다.
    params = "gender!=man": man이 아니어야 한다.
    params = {"gender=man", "gender=woman"}: 다양한 값을 허용한다.

출처

내일배움캠프 Spring 입문 4주차

profile
wannabe---ing

0개의 댓글