1. Annotation Interface Controller
주석이 달린 클래스를 "Controller"라고 나타낸다.
RequestMapping주석을 베이스로 하는 주석 처리 메소드와 함께 사용되는 편이다.
스프링이 @Component를 감지하는 것처럼 @Controller는 자동 감지가 되고, 그것을 위한 bean이 자동 등록 된다.
2. Annotation Interface RequestMapping
요청과 컨트롤러 메소드를 매핑한다. URL, HTTP 메소드, 요청 파라미터, 헤더, 미디어 타입 등에 의한 매치하는 다양한 속성이 있다. 클래스 레벨에서 사용하면 공유의 매핑을 나타내고, 메소드 레벨에서 사용하면 특정한 매핑을 나타낸다.
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping등 @RequestMapping에서 특정 HTTP 메소드마다의 어노테이션도 있다.
공유 매핑 전
클래스 레벨에서 공유 매핑
3. Annotation Interface GetMapping
특정 핸들러 메소드에 HTTP GET요청을 매핑한다. @RequestMapping(method = RequestMethod.GET)과 같다.
4. Annotation Interface PostMapping
특정 핸들러 메소드에 HTTP POST요청을 매핑한다. @RequestMapping(method = RequestMethod.POST)와 같다.
5. Annotation Interface ResponseBody
클래스나 메소드에 반환값이 웹 응답 body라고 나타내는 주석이다. api등 html형식을 유지할 필요 없을 때, 데이터만 전송할때 사용된다.
객체를 반환하면 json형식으로 응답한다.
6. Annotation Interface RestController
클래스에 @Controller와 @ResponseBody가 같이 적용되는 어노테이션이다.
7. Handler Method Arguments
@RequestMapping에 매핑되는 핸들러 메소드에서 사용가능한 매개변수들이 있다.
7.1. @RequestParam
get이나 post로 전송되는 파라미터를 받을 수 있다.
required 플래그는 기본적으로 true이다. false로 하면 해당 파라미터가 전송되지 않아도 오류가 생성되지 않는다.
값을 지정하지 않고 Map<String, String> 또는MultiValueMap<String, String> 형식으로 받으면 모든 파라미터를 받을 수 있다.
value는 변수 이름과 같다면 생략 가능하다. String, Integer등의 단순 타입이면 @RequestParam도 생략 가능하다.
7.2. @PathVariable
URI변수에 접근할 수 있다.
value는 변수 이름과 같다면 생략 가능하다.
7.3. @ModelAttribute
요청 파라미터값들을 객체에 할당해주는 기능이다.
@ModelAttribute는 생략할 수 있다.
그리고 @ModelAttribute로 생성된 객체는 Model 에 추가된다.
model.addAttribute("helloData", helloData)가 된것과 같다.
7.4. @RequestBody
요청 바디를 볼 수 있다.
7.5. @RequestHeader
요청 헤더를 얻을 수 있다.
@RequestParam과 마찬가지로 값을 지정해 받을 수도 있고, Map<String, String> 또는 MultiValueMap<String, String>으로 모든 헤더를 받을 수 있다.
required 플래그도 설정 가능하다.
7.6. RedirectAttributes
redirect를 할 때 query 문자열에 추가해주는 기능이다. URL인코딩도 해준다.
7.7. @CookieValue
쿠키값을 얻을 수 있다.
값을 지정해 받을 수 있다. required 플래그도 설정 가능하다. required는 기본적으로 false이다.
7.8. ServletRequest, ServletResponse, HttpSession
과거 서블릿에서 사용하던 ServeltRequest, ServletResponse도 사용할 수 있다.
HttpSession은 request.getSession()과 같다. 세션을 생성할 때 사용한다. session.setAttribute로 속성을 생성한다.
7.9. @SessionAttribute
세션을 생성할 때가 아닌 조회할 때 사용하는 기능이다. 조회만으로는 세션이 생성되지 않아 서버 자원을 소모하지 않는다.
application.properties에서 다음을 조정할 수 있다.
# 세션 움직임 없을때 타임아웃 시간. 기본 30분이다.
server.servlet.session.timeout=60m
# 세션을 쿠키로만 받는다. 아니면 url로 전송될 때도 있다.
server.servlet.session.tracking-modes=cookie
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller.html
'Java' 카테고리의 다른 글
spring 기본 개념 (0) | 2025.03.11 |
---|---|
thymeleaf 템플릿 엔진 (0) | 2025.02.11 |
spring View, 템플릿 엔진 (0) | 2025.02.07 |
spring 설치와 환경설정 (0) | 2025.02.07 |
Java annotation (0) | 2024.10.29 |