티스토리 뷰
오늘은 스프링 MVC 구조에서 Controller부분을 공부하였는데 이에대해 간단히 정리해보겠다.
@Controller
스프링에서 @ComponentScan 어노테이션을 이용하면 @Component, @Service, @Controller, @Repository 등 몇개의 어노테이션을 설정한 클래스파일을 빈 객체로 자동 등록해준다. 이 때 컨트롤러로 사용할 클래스는 @Controller 어노테이션을 이용해 빈 객체로 등록함과 동시에 명시적으로 컨트롤러로 사용할 것임을 알린다.
@Controller
public class ControllerSutydy {
}
@RequestMapping
@RequestMapping 어노테이션을 사용하면 전달되는 URL을 보고 매핑되는 메서드가 있으면 실행한다.
매핑되는 URL이 없다면 오류가 난다.
- value : 매핑 URL 설정
- method : 요청 Http method를 명시한다. 없으면 모든 Http method 형식에 대해 수행
@Controller의 사용 가능한 파라미터 목록은 다음의 링크에서 확인할 수 있다.
> https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-annarguments
@Controller
@RequestMapping(value = "/hello-spring")
public class ControllerSutydy {
}
위와 같이 클래스 레벨에 작성하여도 된다. 클래스 레발에 작성하게 된다면 해당 URL이 붙은 요청은 해당 컨트롤러로 오게되고 그 아래 URL을 비교하여 메서드를 실행한다.
@RequestMapping을 써도 되지만 HTTP 메서드에 맞게 Mapping 어노테이션이 모두 구현되어있다.
GET // POST // PUT // DELETE // PATCH 등등
"@RestController, @ResponseBody 등의 어노테이션도 있는데 이는 다음에 다시 정리해보겠다"
이제 URL요청을 받았으니 요청받은 데이터를 처리해보자!!
@RequestParam // @ModelAttribute
HTTP 메서드에서 GET은 쿼리 스트링으로 데이터를 전달하고 POST는 HTTP 메시지 바디에 데잍터를 넣어 전달한다.
하지만 스프링에서는 두 메서드에서 데이터를 받아오는 방법에 차이를 두지 않았다.
@GetMapping("member")
public String getMember(@RequestParam("username") String username,
@RequestParam("age") int age) {
return "member";
}
HTTP 파라미터 이름이 변수 이름과 같드면 @RequestParam(name="xx")를 생략할 수 있고 String, int, Integer 등의 단순한 타입이면 @RequestParam까지도 생략이 가능하다.
- required : 파라미터 필수 여부를 설정한다.. 기본은 true
- defaultValue : 파라미터가 전달되지 않더라도 설정된 defaultValue가 지정된 인수로 들어간다.
@PostMapping을 사용하더라도 저런 방식으로 데이터를 받을 수 있다. 하지만 POST를 사용하는 경우는 대게 조회보다는 어떠한 데이터를 등록하기 위해 사용되는데 이때 전달되는 파라미터가 한, 두개가 아니다. 그래서 RequestParam을 이용한 방법으로는 코드가 길어진다. 이때 사용할 수 있는 것이 @ModelAttribute 어노테이션이다.
@ModelAttribute 어노테이션은 객체로 전달받을 수 있다.
@PostMapping("member")
public String registerMember(@ModelAttribute Member member){
/*멤버 등록 메서드*/
return "success";
}
신기하게 Member 객체가 생성되고 요청 파라미터의 이름으로 Member 객체의 프로퍼티를 찾는다. 그리고 해당 프로퍼티의 setter 함수를 통해 값을 설정한다.
@ModelAttribute는 생략이 가능하다!! 즉, Member member 이렇게만 해도 작동이 되는 것이다.
이 외에도 @RestController, @ResponseBody, @RequestBody 등 View를 전달하는 것이 아닌 데이터를 직접 전달할 때 사용하는 어노테이션들도 존재하는데 이는 다음에 정리해보겠다.
아래는 Spring 공식문서이다. 해당 링크로 가면 위의 내용말고도 어마어마한 내용을 볼 수 있다.
더욱 깊이 알고싶다면 아래의 문서로 가는 것을 추천한다.
나또한 입문자로서 알고있는 부분은 빙산의 일각이기에 많은 노력이 필요함을 느낀다.
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc
화이팅!!
'스프링' 카테고리의 다른 글
SpringBoot 3.0 이상 프로젝트 진행시 QueryDSL 사용하기(버전 충돌문제 해결, Gradle 환경) (1) | 2022.12.10 |
---|---|
@RequestBody 데이터 검증하기 (0) | 2022.11.04 |
JSP와 MVC패턴?? (0) | 2022.08.21 |
Servlet HTTP 요청데이터와 응답데이터 (0) | 2022.08.19 |
DI(Dependency Injection) - 의존주입 (0) | 2022.08.17 |
- Total
- Today
- Yesterday
- 게시판#자바#JPA#Entity
- springboot
- 파이썬
- querydsl
- 덧칠하기
- 4673번
- 서블릿#Servlet
- 백준
- Spring
- list
- 사탕 게임#백준#3085
- 7568
- 회고
- java
- arraylist
- 11659
- 오류
- 백준#서강근육맨#20300
- 백준#잃어버린 괄호#1541
- MVC
- HTTP#HTTP특징
- 자바
- this()
- 1316번
- 프로그래머스
- controller
- 스프링
- 1978
- 백엔드#게시판
- 대충 만든 자판
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |