차근차근 개발자 되기

Spring

91일차: Spring_컨트롤러의 어노테이션 / JSON 변환 / 인터셉터 / mybatis와 model1_2021.10.27

wellow 2021. 10. 27. 23:52

 

목차

1.      @RequestParam과 @ModelAttribute

2.      DTO 객체와 List 객체를 JSON으로 변환

 

1. @RequestParam과 @ModelAttribute    (p) hello > person.jsp

 

- @Controller 어노테이션이 붙은 컨트롤러 클래스에서 값을 받을 때, 개별 프로퍼티의 값을 받을 수도 있고 DTO 객체에 값을 저장해서 객체로 받을 수도 있다.

- 이때 @RequestParam과 @ModelAttribute 어노테이션이 사용된다.

- form에서 사용자가 입력한 값(파라미터)의 key 값인 name 값과 매개변수의 이름이 같으면 어노테이션은 생략 가능하다.

 

@RequestParam

- @RequestParam 어노테이션은 name으로 값을 받을 때 사용하는 어노테이션이다.

- 요청 파라미터를 메소드에서 일대일로 받기 위해 사용한다.

- HttpServletRequest에서 제공하는 getParameter() 메소드와 같은 기능을 한다.

- @RequestParam(“name”) 어노테이션은 request.getParameter(“name”)와 같은 역할을 한다.

- ex)

 

 

@ModelAttribute

- @ModelAttribute 어노테이션은 DTO클래스로 값을 받을 때 사용하는 어노테이션이다.

- DTO 같은 객체에 클라이언트가 전송하는 여러개의 파라미터들을 한 번에 바인딩 할 수 있다.

- ex)

 

2. DTO 객체와 List 객체를 JSON으로 변환           (p) hello > sample.jsp

 

- 일반적으로 컨트롤러의 메소드 앞의 자료형은 String을 쓰지만, 경우에 따라 DTO 객체 또는 List 객체로 돌려주기도 한다.

- 이때 @RestController 어노테이션을 사용하면 DTO 객체와 List 객체로 돌려줄 때 {key : value} 값 형태의 JSON 형식으로 변환해서 돌려주게 된다.

- ex) {"mno":23,"firstName":"홍","lastName":"길동"}

 

DTO 객체, List 객체를 JSON으로 변환하기 위한 조건

1) jackson 라이브러리가 pom.xml에 등록되어 있어야 한다.

2) @RestController 어노테이션을 사용해야 한다.

 

• @RestController

- 스프링 버전 4점대부터 지원하는 어노테이션으로, @Controller + @ResponseBody의 역할을 한다.

- @RestController 대신 @Controller를 쓰게 되면, 메소드 위에 @ResponseBody를 써야한다.

- 컨트롤러의 메소드에서는 JSON으로 변환된 객체는 요청한 페이지로 return 되어 출력된다.

 

3. 인터셉터(Interceptor) 로그인     

 

1) 인터셉터(Interceptor)의 개념

- 클라이언트에서 특정 URL 요청시 DispatcherServlet이 Controller를 호출하기 이전에 해당 요청을 가로채는 역할을 수행한다.

- ex) index.jsp에서 upload.do로 요청하면, 스프링의 환경설정 파일인 servlet-context.xml에서 인터셉터로 설정된 LoginCheck.java 파일로 이동

 

 

 

2) 인터셉터 환경 설정 : servlet-context.xml

- 스프링의 환경설정 파일인 servlet-context.xml에서 <bean> 태그로 interceptor를 설정해준다.

 

 

 

3) 인터셉터 구현 방법

추상 클래스(abstract class)인 HandlerInterceptorAdapter 클래스를 상속받아서 구현

인터페이스(interface)인 HandlerInterceptor 인터페이스를 상속받아서 구현

 

- 인터페이스는 아래 3개의 메소드를 모두 오버라이딩 하고, 추상 클래스를 상속받는 경우 선택적으로 메소드 오버라이딩 해서 인터셉터 기능을 구현한다.

 

• boolean preHandle()

• void postHandle()

• void afterCompletion()

 

4) 인터셉터 처리 메소드 호출 시점

• boolean preHandle()

- DispatcherServlet 은 모든 웹 요청의 진입점이다. 클라이언트로부터 요청이 들어오는 경우, 컨트롤러에 요청을 보내주기 전 중간에 요청을 가로챈다.

• void postHandle()

- 컨트롤러의 메소드의 처리가 끝나 return 되고 화면을 띄워주는 처리가 되기 직전에 이 메소드가 수행된다.

• void afterCompletion()

- 컨트롤러가 수행되고 화면처리까지 끝난 뒤 호출된다.

 

 

 

4. Mybatis와 연동한 Model 1 프로젝트   

 

1) 웹 애플리케이션에서의 흐름

- 웹 애플리케이션의 경우, Controller 클래스 → Service 클래스 → DAO 클래스 순서로 값이 전달된다.