어느 것이 더 나은지, spring3 컨트롤러에서“ModelAndView”또는“String”을 반환합니다.


115

ModelAndView를 반환하는 방법

@RequestMapping(value = "/list", method = RequestMethod.GET)
public ModelAndView list(
    @UserAuth UserAuth user, 
    ModelAndView mav) {

    if (!user.isAuthenticated()) {
        mav.setViewName("redirect:http://www.test.com/login.jsp");
        return mav;
    }

    mav.setViewName("list");
    mav.addObject("articles", listService.getLists());

    return mav;
}

반환 방법 String

@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(
    @UserAuth UserAuth user, 
    Model model) {

    if (!user.isAuthenticated()) {
        return "redirect:http://www.test.com/login.jsp";
    }

    model.addAttribute("articles", listService.getLists());

    return "list";
}

이것들은 동일하게 작동합니다. 어느 쪽이 더 좋은 방법입니까? 그리고 차이점은 무엇입니까?

답변:


129

더 좋은 방법은 없습니다. 둘 다 완벽하게 유효합니다. 어떤 것을 사용 하느냐에 따라 어떤 것이 여러분의 애플리케이션에 더 잘 맞는지에 따라 다릅니다. Spring에서는 어느 쪽이든 할 수 있습니다.

역사적으로 두 가지 접근 방식은 서로 다른 버전의 Spring에서 나왔습니다. ModelAndView접근 방식은 사전에 스프링 2.0 컨트롤러에서 모두 모델과 뷰 정보를 반환하는 기본 방법이었다. 이제 Model매개 변수와 String반환 값을 결합 할 수 있지만 이전 접근 방식은 여전히 ​​유효합니다.


8
따라서 String 접근 방식은 새로운 것입니다.
akshayb

1
@skaffman Spring이 컨텍스트 경로를 추가하는 것과 같이 처리하는 방식에 차이가 있는지 설명해 주시겠습니까?
Keerthivasan 2014-08-02

보세요 ( stackoverflow.com/questions/37410839/… ). 의 ModelAndView를 사용하는 동안 나는이 문제를 가지고
비슈누 KR

15

2 센트도 추가하고 싶습니다. 두 번째 접근 방식은 관습 지향적입니다. 즉 개발자는 자신의 뷰가 무엇인지 명시 적으로 언급하지만 반환 문자열은 뷰 이름이라는 암시 적입니다. 코딩, 가독성 및 표준이 적습니다. ModelAndView를 사용하는 이전 방식보다 훨씬 낫습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.