인프런 커뮤니티 질문&답변

parkht님의 프로필 이미지
parkht

작성한 질문수

스프링 웹 MVC

모델 @ModelAttribute

PetClinic에서 @ModelAttribute와 @PathVariable

작성

·

381

0

안녕하세요. PetClinic 소스를 보다가 질문이 있어서 올립니다.

 @ModelAttribute("owner")

    public Owner findOwner(@PathVariable("ownerId") int ownerId) {

        return this.owners.findById(ownerId);

    }

이와 같은 코드면, Controller에 있는 핸들러 중@PathVariable로 ownerId를 받는 핸들러만 사용 가능한건가요?

답변 3

0

백기선님의 프로필 이미지
백기선
지식공유자

아 PetController에 있는거군요.

네 맞습니다. 그 컨트롤러에 보면 해당 컨트롤러에 오는 모든 요청에 ownerId가  URI path에 들어있기 때문에 저렇게 쓰인거네요.

0

parkht님의 프로필 이미지
parkht
질문자

앗! 아닙니다.

PetController.java 에 

@ModelAttribute("owner")

public Owner findOwner(@PathVariable("ownerId") int ownerId) {

        return this.owners.findById(ownerId);

}

이와 같은 코드가 있는데요.

강의를 듣고 @ModelAttribute가 해당 메소드처럼 사용되면, 컨트롤러에 모든 핸들러에 owner를 view로 보낸다고 이해를 했습니다. 여기에 @PathVariable이 있는 경우는 어떤 의미로 동작하는지에 대해 물어본 것이었습니다.

0

백기선님의 프로필 이미지
백기선
지식공유자

질문을 잘 이해를 못했습니다.

그리고 코드가 이상해서 찾아봤더니 원본 코드는 이렇네요.

    @GetMapping("/owners/{ownerId}")

    public ModelAndView showOwner(@PathVariable("ownerId") int ownerId) 

여기서 @GetMapping 대신 @ModelAttribute로 바꾸면 어떻게 되냐고 물으시는건가요? 

parkht님의 프로필 이미지
parkht

작성한 질문수

질문하기