이 글은 인프런에서 김영한 님의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술"을 수강 후 개인적으로 공부한 내용을 정리한 게시글입니다. 잘못된 점이나 부족한 부분이 있다면 언제든 지적 부탁드립니다.
HelloController.java
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
url이 hello-mvc로 요청되면 helloMvc 함수가 실행되게 되고 이때 url에 포함된 name 이라는 파라미터를 넘겨주어 model에 name 이라는 키에 받아온 값을 담아 hello-template.html 로 넘기게 된다.
hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
hello.html에서는 모델 데이터를 받아 ${name}에 값을 받게 되는데
http://localhost:8080/hello-mvc?name=spring
이러한 .url로 요청을 하게되면 컨트롤러의 name의 값은 spring이 되며 모델에 name이라는 값에 spring을 담고 그걸 html로 넘겨 주게 된다.
HelloController.java
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@ResponseBody는
http 통신에 의해 패킷의 body에 값을 직접 담아 보낸다는 의미로
API는 html이 아닌 데이터를 직접 보내게 되므로 return 값은 데이터가 된다. 위 코드에서는 문자열이다.
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
이는 문자열이 아닌 객체를 직접 보내게 되는 것이고
이때 형태는 json 형태로 보내지게 된다.
http://localhost:8080/hello-api?name=spring