Cách nào tốt hơn, hãy trả về “ModelAndView” hoặc “String” trên bộ điều khiển spring3


115

Cách trả về 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;
}

Cách trả về chuỗi

@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";
}

Chúng hoạt động như nhau. cách nào tốt hơn? và sự khác biệt là gì?

Câu trả lời:


129

Không có cách nào tốt hơn. Cả hai đều hoàn toàn hợp lệ. Cái nào bạn chọn để sử dụng phụ thuộc vào cái nào phù hợp với ứng dụng của bạn hơn - Spring cho phép bạn làm điều đó theo một trong hai cách.

Về mặt lịch sử, hai cách tiếp cận đến từ các phiên bản khác nhau của Spring. Phương ModelAndViewpháp này là cách chính để trả về cả mô hình và xem thông tin từ một bộ điều khiển trong trước Spring 2.0. Bây giờ bạn có thể kết hợp Modeltham số và Stringgiá trị trả về, nhưng cách tiếp cận cũ vẫn hợp lệ.


8
Do đó, cách tiếp cận Chuỗi là mới.
akshayb 16/10/13

1
@skaffman Bạn có thể giải thích nếu có bất kỳ sự khác biệt nào trong cách Spring xử lý nó như đường dẫn ngữ cảnh chuẩn bị trước, v.v.
Keerthivasan

vui lòng xem ( stackoverflow.com/questions/37410839/… ). trong khi sử dụng ModelAndView, tôi gặp sự cố này
Vishnu KR

15

Tôi cũng muốn thêm cho tôi 2 xu. Cách tiếp cận thứ hai thiên về hướng quy ước, tức là nhà phát triển đề cập rõ ràng đâu là khung nhìn của mình nhưng ẩn ý rằng chuỗi trả về là tên khung nhìn. Vì vậy, ít mã hóa hơn, dễ đọc và tiêu chuẩn. Tốt hơn nhiều so với cách cũ hơn với ModelAndView

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.