티스토리 뷰
Controller?
Controller는 사용자의 요청을 받아 그에 맞는 동작을 하도록 연결하거나, 응답을 받기를 원하는 것을 돌려주는 역할을 한다.
요청을 분석하고, 처리된 결과를 가공하여 돌려주는 것이 핵심이다.
@Controller
클래스에 @Controller 어노테이션을 붙여주면 클래스를 Controller로 만들 수 있다.
주로 JSP 등을 이용한 View를 return할 때 사용하며, Json 등 데이터 객체를 반환하기 위해서는, @ResponseBody를 추가로 붙여주면 된다.
@Controller
class PostController() {
@GetMapping
fun post() = "post.jsp 디렉토리 경로"
}
@RestController
Controller에서 View를 사용하지 않을 때. 혹은, View에 대한 의존성을 가지고 싶지 않을 때. Json 형태로 데이터 객체만을 반환하게 하기 위해서 사용한다.
View를 반환하고 싶다면, ModelAndView타입을 반환하면 된다.
@RestController
class PostController() {
@GetMapping
fun getPosts() = listOf(
Post()
)
}
아래는 @Controller와 @RestController의 구현상 차이이다.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Component.class)
java.lang.String value() default "";
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Controller.class)
java.lang.String value() default "";
}
@RestController는 @Controller에 @ResponseBody가 추가된 것이다.
그리고, @Component를 통해 Bean에 등록된다.
HTTP 메서드 지정하기
Controller의 각 메서드에 어노테이션을 지정하여 어떤 http 메서드를 사용할지 지정할 수 있다.
각 메서드의 기능은 아래 포스팅에서 정리해두었다.
[HTTP] HTTP 메시지의 구조, 메서드, 응답 코드
HTTP 메시지는 시작 줄, 헤더, 본문 3부분으로 구성된다. 본문은 필요에 따라 있을 수도, 없을 수도 있다. 헤더의 Content-Length 필드는 본문의 크기를 표시한다. 요청 메시지 구조 응답 메시지 구조
sm-jeon-develop.tistory.com
- @GetMapping: 서버의 리소스를 요청할 때 사용한다.
- @PostMapping: 요청하는 데이터를 처리할 때, 주로 리소스를 등록할 때 사용한다.
- @PatchMapping: 리소스를 부분 변경할 때 사용한다.
- @PutMapping: 리소스를 대체하거나, 대체할 리소스가 없으면 등록할 때 사용한다.
- @DeleteMapping: 리소스를 삭제할 때 사용한다.
- @RequestMapping: 기타 메서드를 사용하거나, 한 메서드에 http 메서드를 여러개 지할 때 사용한다.
경로 지정하기
@XXXMapping 어노테이션을 사용하여 요청의 URL을 지정할 수 있다.
@RequestMapping을 클래스(Controller)에 사용하면 해당 클래스의 경로를 한번에 지정할 수 있고,
메소드에 @GetMapping 등을 사용하면 해당 메서드의 클래스에 지정된 경로 하위의 경로를 지정할 수 있다.
@RestController
@RequestMapping("/api")
class PostController() {
@GetMapping("/get")
fun getMethod() {} // .../api/get
@PostMapping("/post")
fun postMethod() {} // .../api/post
}
요청으로부터 값 받아오기
- @PathVariable: URL의 경로를 변수로 사용한다.
- @RequestParam: 쿼리스트링을 변수로 사용한다.
- @RequestBody: Body를 변수로 사용한다.
@RestController
@RequestMapping("/api")
class PostController() {
@GetMapping("/get/{id}")
fun getMethod(@PathVariable("id")id: Int) {} // .../api/get/(id에 대한 int값)
@GetMapping("/get")
fun getQueryString(@RequestParam("p") id: Int {} // .../api/get?p=(p에 대한 int값)
@PostMapping("/post")
fun postMethod(@RequestBody post: Post) {} // .../api/post Post객체를 json형태로 받음
}
응답 코드 지정하기
HTTP의 요청의 응답에는 요청에 관한 상태를 코드로 반환한다. (200, 401, 404, 500 등..)
이때, Controller의 메서드나 Exception 등에 @ResponseStatus 어노테이션을 활용하여 응답 코드를 지정할 수 있다.
'서버 > Spring' 카테고리의 다른 글
[Spring] 상태 유지 - 세션 관리 (쿠키, 세션) (0) | 2024.02.08 |
---|---|
[Spring] 스프링 빈(Bean) (0) | 2024.02.04 |
[Spring] Spring Data JPA - JPARepository (0) | 2024.02.01 |
[Spring] ORM, JPA, Spring Data JPA, Hibernate, JDBC (0) | 2024.01.31 |
[Spring] Spring Scheduler (0) | 2024.01.31 |
- Total
- Today
- Yesterday
- 링크 상태 라우팅
- 거리 벡터 라우팅
- 네트워크 계층
- ECN 패킷
- 사설 IP 주소
- 세션 연결
- 가상 회선
- TTL
- 통합점
- 리키 버킷
- IP
- Service Primitive
- 서비스 프리미티브
- 혼잡
- 세션 계층
- OSI 7계층
- 네임 서버
- Internetworking
- 교환 시스템
- 네트워크
- 데이터링크 계층
- 전송 계층
- 표현 계층
- 와일드카드 마스크
- 동기점
- 라우팅
- 오류 제어
- HTTP
- 포트 주소
- 데이터링크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |