@Controller, @RestController return
@Controller, @RestController return
@Controller์ @RestController ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ์ปจํธ๋กค๋ฌ์ return์ ์์๋ณด์.
@Controller
Rest๊ฐ ์๋ Controller๋ก ์ ์ธํ๊ณ String ๊ฐ์ ๋ฆฌํดํด๋ณด์.
package com.vividswan.blog.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class UserController {
@GetMapping("/user/loginForm")
public String loginForm() {
return "user/loginForm";
}
}
ํด๋ผ์ด์ธํธ์๊ฒ "/user/loginForm"
์ ๊ฒฝ๋ก๋ก get ์์ฒญ์ ๋ฐ์๊ณ , ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ์ ๋ฌํด ์ค์ผ ํ๋ค๊ณ ์๊ฐํด๋ณด์.
get ์์ฒญ์ ๋ํ ์๋ต์ ํ๊ธฐ ์ํด ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด์ผ ๋๊ณ , ์ปจํธ๋กค๋ฌ๋ฅผ ๊ฑฐ์น ๋ค ํด๋น ์ฃผ์์ ๋ง๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ reponse ํด์ผ ํ๋ค.
์ด๋ @Controller
์ด๋
ธํ
์ด์
์ผ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค๊ณ , ๋งคํ๋ ๋ฉ์๋๋ก String ๊ฐ์ ๋ฆฌํดํ๋ฉด, view resolver๊ฐ return์ ๊ด์ฌํ๋ค.
View Resolver
Controller์์ return ๊ฐ์ผ๋ก String ์๋ฃํ์ return ํ๋ฉด View Resolver๊ฐ String๊ณผ ๋งค์นญ๋๋ ํ๋ฉด์ ์ฐพ์์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํด ์ค๋ค.
์ค์ ์ด ์ ๋ค์ด๊ฐ ๊ธฐ๋ณธ์ ์ธ View Resolver์ ๋งคํ์ templates/
+ ๋ฐํ ๊ฐ
+ .html
ํ์์ด๋ค.
์ฆ, "hello"๋ผ๋ ๊ฐ์ return ํ๋ค๋ฉด, templates ํด๋ ์๋์ hello.html
์ ๋ฐํํด ์ค๋ค.
View Resolver ๊ฒฝ๋ก ๋ณ๊ฒฝ
์คํ๋ง ๋ถํธ์ application.yaml ๋ฑ์ ์ค์ ํ์ผ์์ ๋ณ๊ฒฝํ ์ ์๋ค.
jsp๋ก ์๋ตํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ ์๋ ์๋ค.
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
์์ ๊ฐ์ด ์ค์ ํ ๋ค, ์ ํํ ์์น์ return๊ฐ.jsp ํ์ผ์ด ์๋ค๋ฉด, View Resolver๊ฐ ํด๋น ํ์ผ์ ํ๋ฉด์ ๋์์ค ๊ฒ์ด๋ค.
@RestController
RestController๋ ๋จ์ํ String ๊ฐ์ ๋ณด๋ผ ์๋ ์๊ณ , ๊ฐ์ฒด๋ฅผ ๋ณด๋ผ ์๋ ์๋ค.
String return
package com.vividswan.blog.test;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BlogControllerTest {
@GetMapping("/test/hello")
public String hello() {
return "<h1>hello spring boot</h1>";
}
}
์์ ๊ฐ์ด ๋จ์ํ "<h1>hello spring boot</h1>"
๋ฅผ return ํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค๊ณ ๋งคํ๋ ์ฃผ์์ get ์์ฒญ์ ํด๋ณด์.
์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก๋ผ๋ฉด String ๊ฐ์ return ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฐ์ฒด return
package com.vividswan.blog.test;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// ์คํ๋ง์ด com.vividswan.blog ํจํค์ง ์ดํ๋ฅผ ์ค์บํด์ ๋ชจ๋ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ new ํ๋ ๊ฒ์ ์๋๋ค.
// ํน์ ์ด๋
ธํ
์ด์
์ด ๋ถ์ด์๋ ํด๋์ค ํ์ผ๋ค์ newํด์(IoC) ์คํ๋ง ์ปจํ
์ด๋์ ๊ด๋ฆฌํด์ค๋ค.
@RestController
public class BlogControllerTest {
//http://localhost:8080/test/hello
@GetMapping("/test/hello")
public Member hello() {
Member member = new Member();
member.setUsername("vividswan");
member.setEmail("vividswan@naver.com");
member.setPassword("12345");
return member;
}
}
์ ์ปจํธ๋กค๋ฌ์ hello ๋ฉ์๋๋ฅผ ์ด์ง ๋ฐ๊ฟ์, ๋ฉค๋ฒ๋ผ๋ ๊ฐ์ฒด๋ฅผ return ํด๋ณด์.
JSON์ผ๋ก ๋ณํํด ์ฃผ๋ MessageConverter
java object ํ์์ ๊ฐ์ฒด๊ฐ ์๋๋ผ JSON์ผ๋ก ๋ฐ๋์ด์ ์ ์ก๋์๋ค!
@RestController์ ์ด๋ ธํ ์ด์ ์ธ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋์์ ๊ฐ์ฒด ๊ฐ์ ๋ฆฌํดํ๋ค๋ฉด, MessageConverter์ jackson์ด java object๋ฅผ JSON ํํ๋ก ๋ฐ๊ฟ์ ๋ฆฌํดํด์ค๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ํ๋ก ํธ๋จ์ผ๋ก ์๋ฃ๋ฅผ ๋๊ฒจ์ค ๋, JSON ํ์์ ์๋ฃ๋ฅผ ๋ณด๋ด์ค ์ ์์ผ๋ฏ๋ก, ํ๋ก ํธ๋จ๋ JSON ํ์์ ์๋ฃ๋ฅผ ๊ฐ๊ณตํ์ฌ ๊ทธ์ ๋ง๊ฒ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.