@RequestParam, @RequestBody, @ModelAttribute

@RequestParam

  • Query Parameter๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜

  • ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…์„ ์ง์ ‘ ์ง€์ •ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๊ณ , (์•„๋ž˜์˜ name) ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…๊ณผ ๋™์ผํ•œ ๋ณ€์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋˜๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (์•„๋ž˜์˜ password)

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•„์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ƒ๋žตํ•˜๋ฉด 400 ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€๋งŒ, required์˜ ๊ฐ’์„ false๋กœ ์„ค์ •ํ•˜์—ฌ ์ƒ๋žตํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. (์•„๋ž˜์˜ password)

    // URL?name=yihyun&password=1234
    @RequestMapping("/")
    public String renderMyInformation(Model model,
                                    @RepuestParam("name") String myName,
                                    @RequestParam(required=false) String password) {
    	model.addAttribute("name", myName);
    	model.addAttribute("password", password);
    	return "renderํ•  jsp ํŒŒ์ผ๋ช…";
    }
  • ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ๋ฐ”์ธ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    public class Person {
    
    	private String name;
    	private String password;
    
    	public Person(String name) {
    		this.name = name;
    		this.password = "0000";
    	}
    
    	public Person(String name, String password) {
    		this.name = name;
    		this.password = password;
    	}
    
    }

    ์œ„์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ @RequestParam์œผ๋กœ ๋ฐ›๊ณ ์ž ํ•œ๋‹ค๋ฉด, name๋งŒ์„ ๋„˜๊ฒจ์ฃผ๊ฑฐ๋‚˜ name๊ณผ password๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

  • ์ „๋‹ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ๋””ํดํŠธ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. defaultValue ์˜ต์…˜์„ ์ด์šฉํ•œ๋‹ค.

@RequestBody

  • JSON ํ˜•์‹์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Java Object๋กœ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜

  • HttpMessageReader๊ฐ€ Request Body๋กœ ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ @RequestBody ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ๊ฐ์ฒด๋กœ ์—ญ์ง๋ ฌํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    • Spring์—์„œ JSON์˜ ์—ญ์ง๋ ฌํ™”๋Š” Jackson2HttpMessageConverter๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ Setter ๋Œ€์‹  Reflection์„ ์ด์šฉํ•ด์„œ ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค. ๋”ฐ๋ผ์„œ POST ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ @RequestBody์˜ ํด๋ž˜์Šค๋Š” Setter๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

  • GET๊ณผ ๊ฐ™์ด Request Body๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋Š” Query String์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์—ญ์ง๋ ฌํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ WebDataBinder์— ์˜ํ•ด ๋ฐ”์ธ๋”ฉ๋œ๋‹ค. WebDataBinder๋Š” Setter๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ”์ธ๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

@ModelAttribute

  • Model์— Attribute๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Http Servlet ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๊ณผ ๋ฉ”์„œ๋“œ ์ธ์ž์˜ ์ด๋ฆ„์ด ์ผ์น˜ํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ

    • ์ด ๋•Œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋„ ํ•จ๊ป˜ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

    • ์ฆ‰, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ๋ณ„ ๋ณ€ํ™˜ ์ž‘์—… ์—†์ด๋„ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅ

  • ์ฆ‰ @ModelAttribute๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์—๋Š” Query Parameter, Form Data, Multipart๊ฐ€ ๋ชจ๋‘ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

    • ๊ทธ๋Ÿฌ๋‚˜ ์•ž์˜ ๋‘ ๊ฐœ๋Š” @RequestParam, @RequestBody๋ฅผ ์ด์šฉํ•ด ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ @ModelAttribute๋Š” ์ฃผ๋กœ ํŒŒ์ผ(Multipart)์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋™์ž‘ํ•œ๋‹ค.

    1. ModelAttribute ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

    2. WebExchangeDataBinder๊ฐ€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰

      • Query Parameter์™€ Form Field์˜ ์ด๋ฆ„์„ ๋ฐ”์ธ๋”ฉํ•  Object ํ•„๋“œ๋ช…๊ณผ ๋น„๊ต

      • ์ผ์น˜ํ•œ๋‹ค๋ฉด ๋ฐ”์ธ๋”ฉ (์ด ๊ณผ์ •์—์„œ ํƒ€์ž… ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ณ€ํ™˜)

    3. ๋ฐ”์ธ๋”ฉ์— ์‹คํŒจํ•˜๋ฉด WebExchangeBindException์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ

Last updated