Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

HTTP ์š”์ฒญ(ํ—ค๋”, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฉ”์‹œ์ง€) ์ฒ˜๋ฆฌ
๐Ÿ“‚ ์Šคํ”„๋ง/๊ธฐ๋ณธ ๊ฐœ๋…

HTTP ์š”์ฒญ(ํ—ค๋”, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฉ”์‹œ์ง€) ์ฒ˜๋ฆฌ

2023. 4. 20. 22:54

  ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์Šคํ”„๋ง ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.

  1. ํ—ค๋” ์ •๋ณด ์กฐํšŒ
  2. ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ
    (1) ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ง์ ‘ ์กฐํšŒ(@RequestParam)
    (2) ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•œ ์กฐํšŒ(@ModelAttribute)
  3. ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์กฐํšŒ
    (1) ๋‹จ์ˆœ ํ…์ŠคํŠธ (@RequestBody)
    (2) JSON

  ํ•˜๋‚˜์”ฉ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

 

1. ํ—ค๋” ์ •๋ณด ์กฐํšŒ ๐Ÿ•

  HTTP ํ—ค๋” ์ •๋ณด๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

@RequestMapping("/headers")
public String headers(HttpServletRequest request,
                      HttpServletRequest response,
                      HttpMethod httpMethod,
                      Locale locale,
                      @RequestHeader MultiValueMap<String, String> headerMap,
                      @RequestHeader("host") String host,
                      @CookieValue(value = "myCookie", required = false) String cookie
) {
    return "home";
}
  • HttpServletRequest
  • HttpServletResponse
  • HttpMethod
  • Locale
    Locale ์ •๋ณด๋ฅผ ์กฐํšŒํ•œ๋‹ค.
    Locale ์ •๋ณด๋ž€ 'ko_KR'๊ณผ ๊ฐ™์ด ์–ธ์–ด์ •๋ณด๋ฅผ ๋œปํ•œ๋‹ค.
  • @RequestHeader MultiValueMap<String, String> headerMap
    ๋ชจ๋“  HTTP ํ—ค๋”๋ฅผ MultiValueMap ํ˜•์‹์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
    MultiValueMap์ด๋ž€ ํ•˜๋‚˜์˜ ํ‚ค์— ์—ฌ๋Ÿฌ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 
  • @RequestHeader("host") String host
    ํŠน์ • HTTP ํ—ค๋”๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  • @CookieValue(value = "myCookie", required = false) String cookie
    ํŠน์ • ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์กฐํšŒํ•œ๋‹ค.

 

2. ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ - ์ง์ ‘ ์กฐํšŒ(@RequestParam) ๐Ÿ”

  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ(GET)
    ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ์—†์ด, URL์˜ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์„œ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ
    /url?username=amenable&age=20
  • HTML Form(POST)
    ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ (username=amenable&age=20)
    content-type: application/x-www-form-urlencoded

  ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์•„๋ž˜์˜ ๋ฐฉ์‹๋“ค๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

V1. HttpServletRequest์˜ request.getParameter()

@RequestMapping("/request-param-v1")
public String requestParamV1(HttpServletRequest request, 
                             HttpServletResponse response) throws IOException {

    String username = request.getParameter("username");
    int age = Integer.parseInt(request.getParameter("age"));

    return "home";
}

V2. @RequestParam

@RequestMapping("/request-param-v2")
public String requestParamV2(@RequestParam("username") String memberName,
                             @RequestParam("age") int memberAge) {
    return "home";
}

  ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”์ธ๋”ฉ์„ ํ•œ๋‹ค.

V3. @RequestParam ์ธ์ˆ˜ ์ƒ๋žต

@RequestMapping("/request-param-v3")
public String requestParamV3(@RequestParam String username,
                             @RequestParam int age) {
    return "home";
}

  HTTP ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์ด ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ๊ฐ™์œผ๋ฉด @RequestParam์˜ ์ธ์ˆ˜๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ์›๋ž˜๋Š” @RequestParam("username")์ธ๋ฐ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ username์œผ๋กœ ํ•ด์คฌ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

V4. @RequestParam ์ƒ๋žต

@RequestMapping("/request-param-v4")
public String requestParamV4(String username,
                             int age) {
    return "home";
}

  String, int, Integer ๋“ฑ์˜ ๋‹จ์ˆœ ํƒ€์ž…์ด๋ฉด @RequestParam ์ž์ฒด๋„ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•œ๋‹ค.

  ํ•˜์ง€๋งŒ @RequestParam์ด ์ƒ๋žตํ•˜์ง€ ์•Š์œผ๋ฉด, ๋ช…ํ™•ํ•˜๊ฒŒ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ธด ํ•˜๋‹ค.

+α. Map์„ ์ด์šฉํ•œ ์กฐํšŒ

@RequestMapping("/request-param-map")
public String requestParamMap(@RequestParam Map<String, Object> paramMap) {

    Object username = paramMap.get("username");
    Object age = paramMap.get("age");

    return "home";
}

  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ Map๊ณผ MultiValueMap์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

3. ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ - ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•œ ์กฐํšŒ(@ModelAttribute) ๐ŸŸ

  ์ง€๊ธˆ๊นŒ์ง€๋Š” ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง์ ‘ ๋ฐ›๋Š” ๊ฒƒ์„ ์•Œ์•„๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ”๋กœ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ•„์š”ํ•œ ๊ฐ์ฒด์— ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ๋„ฃ์–ด์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๊ฒƒ์„ ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” @ModelAttribute๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•ด ๋ณด์ž.

V1. @ModelAttribute

@Data
public class Person {

    private String name;
    private int age;
}

----------

@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute Person person) {
    return "home";
}

  ์‚ฌ์šฉ๋ฒ•์€ ์ƒ๋‹นํžˆ ๊ฐ„๋‹จํ•˜๋‹ค. ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ์Šคํ”„๋ง์ด Person ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ๊ฐ์ฒด์˜ setter๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์ž…๋ ฅ(๋ฐ”์ธ๋”ฉ)ํ•œ๋‹ค.

V2. @ModelAttribute ์ƒ๋žต

@RequestMapping("/model-attribute-v2")
public String modelAttributeV2(Person person) {
    return "home";
}

  @ModelAttribute์„ ์œ„์™€ ๊ฐ™์ด ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

์•ž์—์„œ ์‚ดํŽด๋ณธ ๊ฒƒ๊ณผ ๊ฐ™์ด @RequestParam๋„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์ƒ๋žต๊ณผ ๊ด€๋ จํ•ด์„œ ์Šคํ”„๋ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

  1. String, int, Integer ๊ฐ™์€ ๋‹จ์ˆœ ํƒ€์ž…์ธ ๊ฒฝ์šฐ → @RequestParam
  2. ๋‚˜๋จธ์ง€ → @ModelAttribute

 

4. ๋ฉ”์‹œ์ง€ ์กฐํšŒ - ๋‹จ์ˆœ ํ…์ŠคํŠธ(@RequestBody) ๐ŸŒญ

  ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ž€ HTTP message body์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋‹ด์•„์„œ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๋‹ค. HTTP API์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๊ณ , ์ข…๋ฅ˜๋กœ๋Š” JSON, XML, TEXT ๋“ฑ์ด ์žˆ๋‹ค. ๋จผ์ € ๋‹จ์ˆœ ํ…์ŠคํŠธ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

V1. HttpServletResponse + InputStream

@PostMapping("/request-body-string-v1")
public String requestBodyStringV1(HttpServletRequest request,
                                  HttpServletResponse response) throws IOException {
    ServletInputStream inputStream = request.getInputStream();
    String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

    return "home";
}

  HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋ฐ์ดํ„ฐ๋ฅผ InputStream์„ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

V2. InputStream

@PostMapping("/request-body-string-v2")
public String requestBodyStringV2(InputStream inputStream) throws IOException {
    String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

    return "home";
}

  ์Šคํ”„๋ง MVC์—์„œ ์ œ๊ณตํ•˜๋Š” InputStream ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ์„ ์ง์ ‘ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. (OutputStream์„ ์ด์šฉํ•ด์„œ ์ง์ ‘ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.)

V3. HttpEntity

@PostMapping("/request-body-string-v3")
public String requestBodyStringV3(HttpEntity<String> httpEntity) throws IOException {
    String messageBody = httpEntity.getBody();

    return "home";
}

  ์Šคํ”„๋ง MVC์—์„œ ์ œ๊ณตํ•˜๋Š” HttpEntity ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ HTTP header, body ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. HttpEntity๋Š” ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ์ •๋ณด๋ฅผ ์ง์ ‘ ์กฐํšŒํ•œ๋‹ค. 

  ์ด๋Š” ์œ„์—์„œ ์‚ดํŽด๋ณธ @RequestParam๊ณผ @ModelAttribute์™€๋Š” ๊ด€๋ จ์ด ์—†๋‹ค.

V4. @RequestBody

@PostMapping("/request-body-string-v4")
public String requestBodyStringV4(@RequestBody String messageBody) throws IOException {
    return "home";
}

  @RequestBody๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋ฐ”๋””๊ฐ€ ์•„๋‹Œ ํ—ค๋” ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด HttpEntity๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ @RequestHeader๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

  ์ด๊ฒƒ ๋˜ํ•œ @RequestParam๊ณผ @ModelAttribute์™€๋Š” ๊ด€๋ จ์ด ์—†๋‹ค.

 

5. ๋ฉ”์‹œ์ง€ ์กฐํšŒ - JSON(@RequestBody) ๐Ÿฟ

  ์ด๋ฒˆ์—๋Š” ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์ค‘์—์„œ HTTP API์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” JSON ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์กฐํšŒํ•ด ๋ณด์ž.

V1. HttpServletRequest + JSON ๋ณ€ํ™˜

private ObjectMapper objectMapper = new ObjectMapper();

@PostMapping("/request-body-json-v1")
public String requestBodyJsonV1(HttpServletRequest request,
                                HttpServletResponse response) throws IOException {

    ServletInputStream inputStream = request.getInputStream();
    String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

    Person person = objectMapper.readValue(messageBody, Person.class);

    return "home";
}

  HttpServletRequest๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€์„œ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜์˜€๋‹ค. ๋ฌธ์ž๋กœ ๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ObjectMapper๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์˜€๋‹ค.

V2. @RequestBody + JSON ๋ณ€ํ™˜

private ObjectMapper objectMapper = new ObjectMapper();

@PostMapping("/request-body-json-v2")
public String requestBodyJsonV2(@RequestBody String messageBody) throws IOException {

    Person person = objectMapper.readValue(messageBody, Person.class);

    return "home";
}

  ์ด์ „์— ์‚ดํŽด๋ดค๋˜ @RequestBody๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ๋ฉ”์‹œ์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๊ณ  messageBody์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ž๋กœ ๋œ JSON ๋ฐ์ดํ„ฐ์ธ messageBody๋ฅผ objectMapper๋ฅผ ํ†ตํ•ด์„œ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

V3. @RequestBody

@PostMapping("/request-body-json-v3")
public String requestBodyJsonV3(@RequestBody Person person) throws IOException {

    return "home";
}

  @RequestBody์— ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•˜์—ฌ HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ์„ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  @RequestBody๋Š” '@RequestParam๊ณผ @ModelAttribute'์™€ ๋‹ฌ๋ฆฌ ์ƒ๋žต์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ ์ด์œ ๋Š” @RequestBody๊ฐ€ ์ƒ๋žต๋œ๋‹ค๊ณ  ํ•˜๋ฉด @ModelAttribute๊ฐ€ ์ ์šฉ๋˜์–ด ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

+α. HttpEntity

@PostMapping("/request-body-json-v4")
public String requestBodyJsonV4(HttpEntity<Person> httpEntity) throws IOException {
    Person person = httpEntity.getBody();

    return "home";
}

  ๋ฌผ๋ก  JSON์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋‹จ์ˆœ ํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ HttpEntity๋ฅผ ์ด์šฉํ•ด๋„ ๋œ๋‹ค.

 

ํ•ด๋‹น ๊ธ€์€ ๊น€์˜ํ•œ ๋‹˜์˜ '์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ '์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'๐Ÿ“‚ ์Šคํ”„๋ง > ๊ธฐ๋ณธ ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฉ”์‹œ์ง€ & ๊ตญ์ œํ™” (Message & Internationalization)  (0) 2023.04.25
HTTP ์‘๋‹ต(์ •์  ๋ฆฌ์†Œ์Šค, ๋ทฐ ํ…œํ”Œ๋ฆฟ, HTTP ๋ฉ”์‹œ์ง€) ์ฒ˜๋ฆฌ  (0) 2023.04.21
์Šคํ”„๋ง MVC  (0) 2023.04.19
์˜์กด์„ฑ ์ฃผ์ž… - DI(Dependency Injection)  (0) 2023.04.18
๋กœ๊น… (SLF4J, Logback)  (0) 2023.04.09
    '๐Ÿ“‚ ์Šคํ”„๋ง/๊ธฐ๋ณธ ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ๋ฉ”์‹œ์ง€ & ๊ตญ์ œํ™” (Message & Internationalization)
    • HTTP ์‘๋‹ต(์ •์  ๋ฆฌ์†Œ์Šค, ๋ทฐ ํ…œํ”Œ๋ฆฟ, HTTP ๋ฉ”์‹œ์ง€) ์ฒ˜๋ฆฌ
    • ์Šคํ”„๋ง MVC
    • ์˜์กด์„ฑ ์ฃผ์ž… - DI(Dependency Injection)
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”