mojo's Blog

스프링 MVC 컨트롤러 및 RestController 구현 본문

Spring

스프링 MVC 컨트롤러 및 RestController 구현

_mojo_ 2022. 1. 7. 16:46

스프링 개발환경 설정

 

※ Spring Tools 설치

1. [Help] -> [Eclipse Marketplace] 를 선택하고 화면의 [Search] 탭에서 'Spring' 을 검색하여 Spring Tools 4의 <Install> 버튼을 클릭하여 설치를 진행한다.

 

 

2. 'Spring IDE Boot Microservices Dash' 를 선택한 다음 <Confirm>을 클릭한다.

 

 

3. 라이선스 등의 화면에서 <동의>를 클릭하고 <Finish>를 클릭하면, 창이 꺼지고 설치가 진행된다.

설치가 완료되면 '이클립스를 재시작한다'는 메시지가 나오면서 <Restart Now>를 클릭하려 재시작한다.

 

 

※ 스프링 프로젝트 생성

4. 스프링 프로젝트 생성을 위해 [File] -> [New] -> [Spring Starter Project] 메뉴를 선택한다.

 

 

5. 'Spring Boot DevTools'와 'Spring Web'을 선택하고 Finish 버튼을 클릭한다.

 

6. 기다리면 끝이다.

 

 

※ JSP 사용 설정

7. pom.xml에 <dependencies> ... </dependencies> 사이에 다음을 넣어준다.

 

 

8. [src/main/resources] 폴더의 'application.properties' 파일에 다음 내용을 추가해준다.

 

 

9. [src] -> [main] 폴더 아래에 [webapp] 폴더를 만들고 그 아래에 [WEB-INF] 를 만들고 다음 [views] 폴더까지 추가로 생성해준다.

 

 

※ JSP 테스트

10. [Web-INF] -> [views] 폴더 아래에 다음과 같이 jsp 파일을 만들어 준다.

 

 

11. Java Package를 com.example.demo로 하고 class 이름을 TestWebController로 설정하여 다음과 같이 컨트롤러를 만든다.

 

 

12. [src] -> [main] -> [java] -> [com] -> [example] -> [demo]  폴더의 Application 클래스를 실행한다.

이때, [Run As] -> [Spring Boot App] 을 실행하는 것을 주의한다.

 

 

13. 이클립스 콘솔에서 스프링 부트 실행을 확인한 후, 크롬 웹 브라우저를 별도로 실행하여 http://localhost:8080/test/hello 를 호출한다.

 

 

 

스프링 MVC 컨트롤러 구현

 

 

이제 본격적으로 스프링 MVC 컨트롤러 구현을 살펴보도록 한다.

요청 파라미터 처리 및 데이터를 포함한 뷰 포워딩에 대해 살펴보도록 한다.

 

※ 요청 파라미터 처리하기

위에서 GET, POST는 각각 @GetMapping, @PostMapping 애너테이션을 사용했다.

서블릿에서도 설명했듯이 GET, POST는 클라리언트가 서버로 요청하는 과정에서만 의미가 있고 일단 서버가 요청을 받아들인 다음에는 처리 방식이 동일하다고 했다.

따라서 이번에는 GET 방식을 사용해 요청 파라미터를 처리하는 부분을 살펴보도록 한다.

 

1. TestWebController.java 클래스를 다음과 같이 수정해본다.

@GetMapping("/hello2")
@ResponseBody
public String hello2(@RequestParam(value="msg", required=false) String msg) {
    return msg;
}
  • @ResponseBody : 별도의 뷰가 아닌 리턴값을 직접 HTTP 응답 보디에 출력한다는 의미다. 여기서는 /hello2 요청 시 파라미터로 전달받은 값이 브라우저에 출력되도록 한다.
  • hello2() : msg라는 이름으로 전달된 요청 파라미터 값을 String msg 변수에 전달한다. 여러 인자를 처리하는 것도 가능하며 폼 데이터와 같이 여러 데이터가 전달되는 경우 개별 인자로 받는 것보다 데이터 클래스 타입(ex : Member, Product)으로 전달받는 것이 좋다. 이 경우에는 @ModelAttribute 애너테이션을 사용하면 된다.

 

2. 테스트를 해보도록 한다.

http://localhost:8080/test/hello2?msg=안녕하세요? 와 같이 요청해보도록 한다.

 

 

※ 데이터를 포함한 뷰 포워딩

1. 이번에는 데이터를 포함해 뷰를 포워딩해보도록 한다.

데이터를 포함하기 위해서는 인자에 Model 객체를 추가해야 한다.

전달할 데이터를 인자로 받은 Model 객체에 넣고 뷰를 리턴하면 된다.

다음 코드를 이어서 작성한다.

@GetMapping("/hello3/{msg}")
public String hello3(@PathVariable String msg, Model m) {
    m.addAttribute("msg", msg);
    return "hello";
}

 

2. 'hello.jsp' 에는 날짜와 시간을 출력하는 부분 아래쪽에 EL을 이용하여 전달받은 값을 출력하도록 코드를 추가한다.

메시지: ${msg}

 

3. http://localhost:8080/test/hello3/안녕하세요 와 같이 요청해보도록 한다.

 

 

스프링 RestControlelr 구현

 

스프링 RestController는 JAX-RS와 거의 동일하다.스프링에서 REST API를 구현하기 위한 기본적인 코드구성을 살펴보도록 한다.

 

1. 먼저 TestRestController라는 이름으로 클래스를 생성하고 애너테이션을 추가한다.

package com.example.demo;

import java.util.HashMap;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestRestController {
	
	@GetMapping("/hello")
	public String hello(@RequestParam(value="msg", required=false) String msg) {
		return msg;
	}
	
	@GetMapping("/hello2")
	public HashMap<String, String> hello3() {
		HashMap<String, String> map = new HashMap<>() {
			{
				put("이름", "홍길동");
				put("나이", "30");
				put("국적", "서울");
			}
		};
		return map;
	}
}

 

2. 브라우저에 http://localhost:8080/api/hello?msg=메시지내용 ,

http://localhost:8080/api/hello2 주소를 각각 요청해서 결과를 확인해본다.

/hello2 요청의 경우 다음과 같이 JSON 형태로 리턴되는 것을 볼 수 있다.

 

Comments