중복된 model 요소 해결하는 특별한 ModelAttribute

gwjeon·2021년 11월 16일
0


학습참조
인프런-스프링 MVC 2편 백엔드 웹 개발 활용 기술(김영한님)


스프링에서는 컨트롤러 마다 중복된 데이터를 model에 담는 상황을 효율적으로 처리하기 위하여 다음과 같은 기능을 지원한다.
예로 두개의 컨트롤러에서 중복된 데이터를 model에 담는다고 가정해보자.

Controller

public class controller {

    @GetMapping("/add")
    public String add(Model model) {
        Map<String, String> regions = new LinkedHashMap<>();
        regions.put("SEOUL", "서울");
        regions.put("BUSAN", "부산");
        regions.put("JEJU", "제주");
        model.addAttribute("regions", regions);
        return "add";
    }

    @GetMapping("/results")
    public String results(Model model) {
        Map<String, String> regions = new LinkedHashMap<>();
        regions.put("SEOUL", "서울");
        regions.put("BUSAN", "부산");
        regions.put("JEJU", "제주");
        model.addAttribute("regions", regions);
        return "results";
    }
}

위 코드는 SEOUL, BUSAN, JEJU를 Key로 가지는 Map regions을 model에 담아서 반환한다. add와 results 모두 중복된 코드를 가지고 있다. 물론, 해당 부분만 Method로 뽑아내서 사용해도 무방하지만 Spring에서는 특별한 ModelAttribute 기능을 지원한다.

public class controller {

    @ModelAttribute("regions")
    public Map<String, String> regions() {
        Map<String, String> regions = new LinkedHashMap<>();
        regions.put("SEOUL", "서울");
        regions.put("BUSAN", "부산");
        regions.put("JEJU", "제주");

        return regions;
    }
}

@ModelAttribute 애노테이션을 이용하여 다음과 같이 Method를 만든다면 controller를 호출하는 모든 요청에 return 데이터 regionsmodel에 담기게 된다.

profile
ansuzh

0개의 댓글