1. ์ ์ ํ์ด์ง, ๋์ ํ์ด์ง
2. ๋ฐ์ดํฐ๋ฅผ client ๋ก ๋ฐํํ๋ ๋ฐฉ๋ฒ
3. Path Variable & Request Param
4. HTTP ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ์ฒ๋ฆฌํ๊ธฐ
1. html ํ์ผ ๋ฐํ
# ์ ์ ํ์ด์ง
@Controller
public class HtmlController {
//์ ์ ํ์ผ, static ํด๋์ ์์น!
@GetMapping("/static-hello")
public String hello(){
return "hello.html";
}
@GetMapping("/html/redirect")
public String htmlStatic(){
return "redirect:/hello.html";
} //thymeleaf ํ๊ฒฝ์์ controller ๋ฅผ ๊ฑฐ์น๋ ๋ฐฉ์
//์ ์ ํ์ผ, templates ํด๋ ๋ด์ ์์นํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๊ธด ํจ.
@GetMapping("/html/templates")
public String htmlTemplates()
{
return "hello";
}
//๊ฐ๊ฐ์ return ๋ด์ฉ์ ํ์ธํ๊ธฐ!
#๋์ ํ์ด์ง ์ฒ๋ฆฌ
@Controller
public class HtmlController {
private static long vistCount=0;
@GetMapping("html/dynamic")
public String htmlDynamic(Model model){ //JAVA์์ Model ๊ฐ์ฒด ์ ๊ณต.
visitCount++;
model.addAttribute("visit", visitCount); //๋ณ๋์ฌํญ์ด ์๊ธด ๋ฐ์ดํฐ๋ฅผ ์ ์ฉํ๋ ๊ตฌ๊ฐ
return "html-visit"; //model.addAttribute() ์ฌ์ฉ!
}
}
- ๋์ ํ์ด์ง๋ฅผ ๋ง๋ค ๋ ํ์ํ ๋ ๊ฐ์ง : model, view ์ด๋ฆ์ ์ ๋ณด!!!
2. data client ๋ฐํ ๋ฐฉ๋ฒ
- 1๋ฒ ๊ฐ์ ๊ฒฝ์ฐ html ๋ฑ์ ํ์ผ ์์ฒด๋ฅผ ๋ฐํํจ. ์ด์ ์ ์ ํ๋ก ํธ์ ๊ฒฐํฉ์ด ๋์จํ ํํ๋ก ๋ฐ๋๋๋ฐ
์ง๊ธ ์ดํด๋ณผ ๊ฒฝ์ฐ๋ ๊ทธ ์๋ก ๋ณผ ์ ์๋ค.
- html ํ์ผ ์์ฒด๋ฅผ ๋ฐํ x, JSON ํํ๋ก ํ์ํ ์ ๋ณด๋ง ๋ฐํํ๋ ํํ!
@Controller
@RequestMapping("/response")
public class ResponseController {
#1
@GetMapping("/json/string")
@ResponseBody
public String helloStringJson() {
return "{\"name\":\"Robbie\",\"age\":95}";
}
#2
@GetMapping("/json/class")
@ResponseBody
public Star helloClassJson() { //Star ํด๋์ค ํ์
return new Star("Robbie", 95);
}
}
#JSON ๋ฐ์ดํฐ ๋ฐํ ๋ฐฉ๋ฒ
#1. ๋ฐํ ๊ฐ: String -> JSON ํ์ ์๋ฒ๊ฐ ์ดํดํ ์ ์์ -> JSON ํํ์ String ํ์ ์ผ๋ก ๋ณํํด์ ์ฌ์ฉ
#2 java ๊ฐ์ฒด
-> ํด๋ผ์ด์ธํธ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ดํดํ ์ ์๋ค. ๊ทธ๋์ 1๋ฒ์ ๊ฒฝ์ฐ์ฒ๋ผ json ํํ๋ก ๋ฐํํด์ผ ํ๋๋ฐ
Spring์์ ํด๋น ์์ ์ ์์์ ํด์ค๋ค! Star ํด๋์ค์ ์ ์๋ ๊ฐ์ key, retrun ์ ๋ฐํํ๋ ๋ฐ์ดํฐ๋ฅผ value ๊ฐ์ผ๋ก !
(Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
-> ResponseBody ๋ํ ๋ฐ๋ณต๋๋ค ! ์ค์ฌ๋ณด์!
@RestController ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด๋ ResponseBody + Controller ๋๊ฐ์ง๊ฐ ํฉ์ณ์ง ๊ฒ!
๋ฉ์๋์ ๋ช ์ํ์ง ์๊ณ @Controller ๋์ ํด๋น ์์น์ @RestController ์ ์ด์ฃผ๋ฉด ๊ฐ์ ๊ธฐ๋ฅ์ ํ๊ฒ ๋๋ค!
3. Path Variable(์๋ต x) & Request Param(์๋ตO)
- ํด๋ผ์ด์ธํธ ์ธก ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก HTTP์์ฒญ์ ๋ณด๋ผ ๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ณด๋ผ ์ ์๋ค.
#1. Path Variable
- ์๋ฒ์ ๋ณด๋ด๋ ค๋ ๋ฐ์ดํฐ๋ฅผ URL์ ์ถ๊ฐํ ์ ์๋ค.
- @PathVariable
#2. Request Param (์ฟผ๋ฆฌ)
- key, valuie ํ์
- ์๋ฒ์ ๋ณด๋ด๋ ค๋ ๋ฐ์ดํฐ๋ฅผ URL ๊ฒฝ๋ก ๋ง์ง๋ง์ ?์ &๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐํ ์ ์๋ค.
- @RequestParam
ex) ?name=Robbie&age=95
// GET http://localhost:8080/hello/request/form/param?name=Robbie&age=95
@GetMapping("/form/param")
@ResponseBody
public String helloGetRequestParam(@RequestParam String name, @RequestParam int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
-> ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๋ฐฉ๋ฒ!
ํด๋น ์์ฒญ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ @RequestParam ์ ๋ํ ์ด์ ! ๊ทธ๋ฆฌ๊ณ key ๋ถ๋ถ์ ์ ์ธํ ๋ณ์ ํ์ ๊ณผ ๋ณ์๋ช ์ ์ ์ธํด์ฃผ๋ฉด ๋๋ค~!
์ด๋, ํด๋น ์ ๋ํ ์ด์ ์ ์๋ต์ด ๊ฐ๋ฅํ๋ฐ ์์ฒญ์์ ํ๋ผ๋ฏธํฐ ๊ฐ์ด ์์ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค
๊ทธ๋ฌ๋ ๋น์ฐํ ๋ฐ์ดํฐ ์์ด ์์ฒญํ๋ ๊ฒฝ์ฐ๋ ์๋ค!
๊ทธ๋ด ๋ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ ๋ถ๋ถ @RequestParam(required=false) ๋ก ์ค์ ํด์ฃผ๋ฉด ํ๋ผ๋ฏธํฐ ๊ฐ์ด ์์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค ~~
4. HTTP ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ์ฒ๋ฆฌํ๊ธฐ
- ModelAttribute (์๋ตo), RequestBody (์๋ต x)
-> ์ด์ ์๋ POST ๋ฐฉ์์ผ๋ก ๋ค์ด์จ ์์ฒญ์์ Body์ ์ฟผ๋ฆฌ ํ์์ผ๋ก ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ RequestParam์ ํตํด ์ฒ๋ฆฌํจ.
1. @ModelAttribute
Body ๋ถ๋ถ์ ๋ค์ด์จ ์ฟผ๋ฆฌ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ Spring ๋ด๋ถ์์ ์๋์ผ๋ก ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ค๋ค.
@ModelAttribute ์ ๋ํ ์ด์ ์ด ํ์ํจ.
1) html form ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ(POST) ์์ฒญ์ ๋ณด๋ผ ์ ์์(์ด์ฐจํผ ์ฟผ๋ฆฌ ํํ๋ก ์ ๋ฌ๋จ.)
2) QueryString(GET)
- ๋ฐ์ดํฐ๊ฐ ์ ์ ๊ฒฝ์ฐ์๋ ๊ด์ฐฎ์ผ๋ ์ฌ๋ฌ๊ฐ์ผ ๊ฒฝ์ฐ @RequestParam์ผ๋ก ํ๋ํ๋ ๋ฐ๊ธฐ์ ๋ฒ๊ฑฐ๋ก์ธ ์ ์๋ค.
๊ทธ๋์ ์ด๊ฒ๋ ๊ฐ์ฒด๋ก ์ฒ๋ฆฌํ๊ธฐ~
// [Request sample]
// GET http://localhost:8080/hello/request/form/param/model?name=Robbie&age=95
@GetMapping("/form/param/model")
@ResponseBody
public String helloRequestParam(@ModelAttribute Star star) {
return String.format("Hello, @ModelAttribute.<br> (name = %s, age = %d) ", star.name, star.age);
}
์ฃผ์! ํด๋น ์ ๋ํ ์ด์ ๋ ์๋ต์ด ๊ฐ๋ฅํ๋ค..!
๊ทธ๋ ๋ค๋ฉด @RequestParam & @ModelAttribute ์๋ต์ด ๊ฐ๋ฅํ ์ด ๋๊ฐ์ง๋ฅผ ์ด๋ป๊ฒ ๊ตฌ๋ถํ ๊น?
- ํ๋ผ๋ฏธํฐ ๋ถ๋ถ์ด ํด๋์ค๋ Object ์ผ ๊ฒฝ์ฐ์๋ @ModelAttribute ๋ก ์ธ์
- SimpleValueType(์์ํ, wrapper, Date)์ผ ๊ฒฝ์ฐ์๋ RequestParam์ผ๋ก ์ธ์ํ๋ค.
2. @RequestBody
HTTP body ๋ถ๋ถ์ JSON ํํ๋ก ๋ค์ด์จ ๋ฐ์ดํฐ๋ @RequestBody ์ ๋ํ ์ด์ ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ฐ์ ์ ์๋ค! (์๋ต ๋ถ๊ฐ!)
// [Request sample]
// POST http://localhost:8080/hello/request/form/json
// Header
// Content type: application/json
// Body
// {"name":"Robbie","age":"95"}
@PostMapping("/form/json")
@ResponseBody
public String helloPostRequestJson(@RequestBody Star star) {
return String.format("Hello, @RequestBody.<br> (name = %s, age = %d) ", star.name, star.age);
}
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL Spring #2-3 (0) | 2023.12.12 |
---|---|
TIL Spring 2-2 (0) | 2023.12.08 |
TIL Spring 2-1 (1) | 2023.12.07 |
TIL Spring 1-3 (0) | 2023.12.06 |
TIL Spring #1-1 (0) | 2023.12.04 |