Spring Boot에서 Controller를 만드려면 Spring Container에 Controller로 쓸 클래스를 등록해 주어야 한다.
등록해 주기 위해서는 SpringConfig를 구현하거나 Controller로 쓸 클래스 위에 @Controller
를 추가해 주면된다.
어노테이션을 추가하는 방식으로 구현하는 것을 추천한다.
SpringConfig 버전
@Configuration public class SpringConfig { @Bean public YourController yourController() { return new YourController(); } }
Annotation 버전
@Controller public class YourController { }
HTTP 메서드 매핑을 하기 위해서는 @[메서드 이름]Mapping
이라는 어노테이션을 사용해야 한다.
예시로 HelloController를 만들어서 GET /hello
요청을 받아서 templates/hello.html
파일을 return해주기 위해서는 다음과 같이 코드를 작성할 수 있다.
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello() {
return "hello";
}
}
만약 hello.html
이 아니라 hello
라는 문자열을 반환하고 싶다면 @Controller
대신에 @RestController
를 사용하거나, 만약 한 Controller에서 여러 Mapping을 하기 위해서는 Mapping 어노테이션 아래 @ResponseBody
라는 어노테이션을 붙여주면 된다.
@Controller
@ResponseBody
@RestController
위 두 코드는 동일한 기능을 한다.
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
public class HelloController {
@GetMapping("hello")
public String hello() {
return "hello";
}
}
만약 Model을 사용해서 HTML에서 변수를 사용하려면 다음과 같이 Model의 addAttribute()
를 사용해서 구현할 수 있다.
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
String test = "test";
model.addAttribute("test", test);
return "hello";
}
}
Mapping에서 파라미터 값을 받으려면 함수에 @RequestParam
을 사용해서 구현할 수 있다.
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("hello")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
위 코드로 애플리케이션을 실행하면 /hello?name=test
로 접속하면 hello test
라는 문자가 반환된다.