티스토리 뷰

오늘은 스프링 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

 

Web on Servlet Stack

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more com

docs.spring.io

@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

 

Web on Servlet Stack

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more com

docs.spring.io

 

화이팅!!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함