들어온 요청을 처리해주는 역할
@Controller
: 해당 Class가 Conroller의 역할을 수행할 수 있도록 등록
@GET
: 데이터 확인 요청
@POST
: 데이터 등록 요청
@PUT
: 데이터 수정 요청
@DELETE
: 데이터 삭제 요청
@RequestMapping
: 중복되는 URL 생략
만약 다음과 같이 4개의 API가 존재한다고 할 때 Spring MVC에 Front Controller 패턴이 적용되어 있지 않다면 4개의 API를 처리하기 위해 3개의 클래스와 4개의 메서드를 구현해야 한다.
// @WebServlet이라는 애너테이션을 이용해 urlPatterns를 주면 해당 URL로 요청이 올 경우 해당 메서드로 매핑
@WebServlet(urlPatterns = "/user/login")
public class UserLoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
@WebServlet(urlPatterns = "/user/logout")
public class UserLogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
@WebServlet(urlPatterns = "/user/signup")
public class UserSingUpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
Spring MVC는 효율적인 API 처리를 위해 Front Controller 패턴이 존재하기 때문에 API마다 파일을 만들 필요가 없다.
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/login")
public String login() {
// ...
}
@GetMapping("/logout")
public String logout() {
// ...
}
@GetMapping("/signup")
public String signup() {
// ...
}
@PostMapping("/signup")
public String registerUser(SignupRequestDto requestDto) {
// ...
}
}
@Controller
: 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록@Controller
public class HelloController {
@GetMapping("/api/hello")
@ResponseBody
public String hello() {
return "Hello World!";
}
}
@GET
: 데이터 요청@GetMapping("/api/get")
@ResponseBody
public String get() {
return "GET Method 요청";
}
@POST
: 데이터 등록 요청@PostMapping("/api/post")
@ResponseBody
public String post() {
return "POST Method 요청";
}
@PUT
: 데이터 수정 요청@PutMapping("/api/put")
@ResponseBody
public String put() {
return "PUT Method 요청";
}
@DELETE
: 데이터 삭제 요청@DeleteMapping("/api/delete")
@ResponseBody
public String delete() {
return "DELETE Method 요청";
}
@RequestMapping
: 중복되는 URL 생략@Controller
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World!";
}
@GetMapping("/get")
@ResponseBody
public String get() {
return "GET Method 요청";
}
@PostMapping("/post")
@ResponseBody
public String post() {
return "POST Method 요청";
}
@PutMapping("/put")
@ResponseBody
public String put() {
return "PUT Method 요청";
}
@DeleteMapping("/delete")
@ResponseBody
public String delete() {
return "DELETE Method 요청";
}
}
예시)
package com.sparta.springmvc.controller;
import org.springframework.stereotype.Controller; // @Controller 사용
import org.springframework.web.bind.annotation.*; // @ReauestMapping 사용
@Controller
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World";
}
@GetMapping("/get")
@ResponseBody
public String get() {
return "GET Method 요청";
}
@PostMapping("/post")
@ResponseBody
public String post() {
return "POST Method 요청";
}
@PutMapping("/put")
@ResponseBody
public String put() {
return "PUT Method 요청";
}
@DeleteMapping("/delete")
@ResponseBody
public String delete() {
return "DELETE Method 요청";
}
}
@Controller
애너테이션을 사용할 때 String으로 반환을 하게 되면 resources파일 → templates 파일
에서 HTML 파일을 찾아서 반환(View 내용을 전달하는 방식)@ResponseBody
: HTML로 반환되지 않고, 문자열 그대로 반환하도록 설정@RequestMapping
: 중복된 URL을 줄여줌