Controller

김나영·2023년 6월 27일
0

Spring

목록 보기
8/38

ex)

Servlet Code

  • 만약 Spring MVC에 Front Controller 패턴이 적용되어있지 않았다면?

  • 아래의 코드처럼 단 4개의 API를 처리하기 위해 무려 3개의 클래스를 만들어야함

@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) {
		// ... 
	}

}

Controller Code

  • Spring MVC는 효율적인 API 처리를 위해 Front Controller 패턴을 만들어냄

  • 이제는 API 마다 파일을 만들 필요 X

    • 보통 하나의 Contoller 에 모든 API를 넣지 X
    • 유사한 성격의 API 를 하나의 Controller 로 관리
  • 메서드 이름도 내 마음대로 설정 가능 (단, 클래스 내의 중복메서드명 불가)

@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
public class HelloController {
    @GetMapping("/api/hello")
    @ResponseBody
    public String hello() {
        return "Hello World!";
    }
}
  • 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록해줄 수 있음

Mapping

  • 각각의 HTTP Method에 매핑되는 Annotation

1) @Getmapping

@GetMapping("/api/get")
@ResponseBody
public String get() {
    return "GET Method 요청";
}

2) Postmapping

@PostMapping("/api/post")
@ResponseBody
public String post() {
    return "POST Method 요청";
}

3) Putmapping

@PutMapping("/api/put")
@ResponseBody
public String put() {
    return "PUT Method 요청";
}

4) Deletemapping

@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 요청";
    }
}

0개의 댓글