백엔드/Spring(Boot)

스프링 HTTP 요청 파라미터 - @ModelAttribute

김어찐 2021. 9. 9. 02:00
728x90
import hello.springmvc.basic.HelloData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@Slf4j
@Controller
public class RequestParamController {


    @ResponseBody
    @RequestMapping("/model-attribute-v1")
    // 요청 파라미터의 이름으로 HelloData 객체의 프로퍼티를 찾는다
    // 파라미터 이름이 "username" 이면 setUsername() 메서드를 찾아서 호출하면서 값을 입력한다.
    public String modelAttributeV1(@ModelAttribute HelloData helloData) {

        log.info("helloData={}", helloData);
        return "ok";
    }

    @ResponseBody
    @RequestMapping("/model-attribute-v2")
    // @ModelAttribute 삭제 가능
    // 단순타입(String,int 등) 은 생략 가능
    public String modelAttributeV2(HelloData helloData) {

        log.info("helloData={}", helloData);
        return "ok";
    }
}
    @PostMapping("/add")
    public String addItemV2(@ModelAttribute("item") Item item,Model model){
        
        itemRepository.save(item);

        //@ModelAttribute 내부의 "item"이 자동으로 model.addAttribute 해준다 같은 이름으로 key,value
        //model.addAttribute("item", item);
        
        return "basic/item";
    }
    
    @PostMapping("/add")
    public String addItemV4(Item item,Model model){

        itemRepository.save(item);
        // model에 자동으로 담김
        // 이렇게까지 가능하지만 추천하지는 않음
        //model.addAttribute("item", item);
        return "basic/item";
    }
728x90