ModelAndView核心用法及示例

ModelAndView 是 Spring MVC 中用于封装 模型数据视图信息 的核心对象,常用于控制器(Controller)方法中返回数据和视图名称。以下是其核心用法和示例:


1. 基本用法

在 Controller 方法中直接创建 ModelAndView 对象,添加数据并指定视图名称。

@Controller
public class MyController {
    @RequestMapping("/hello")
    public ModelAndView hello() {
        ModelAndView mav = new ModelAndView("hello"); // 视图名称(如 hello.jsp)
        mav.addObject("message", "Hello, World!");     // 添加模型数据
        return mav;
    }
}

2. 核心方法

  • 添加模型数据

    mav.addObject("key", value);  // 支持任意类型对象
    

    或通过 Map

    Map<String, Object> model = mav.getModel();
    model.put("key", value);
    
  • 设置视图名称

    ModelAndView mav = new ModelAndView("viewName");
    // 或
    mav.setViewName("viewName");
    

3. 数据与视图解析

  • 视图解析:需配置视图解析器(如 InternalResourceViewResolver),例如:

    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    bean>
    

    此时视图名 "hello" 会解析为 /WEB-INF/views/hello.jsp

  • 模型数据传递:在 JSP/Thymeleaf 等视图中通过 ${key} 访问数据。


4. 结合请求参数

可结合 HttpServletRequest 直接操作请求域:

@RequestMapping("/user")
public ModelAndView getUser(HttpServletRequest request) {
    ModelAndView mav = new ModelAndView("user");
    request.setAttribute("username", "Alice"); // 等同于 mav.addObject()
    return mav;
}

5. 其他用法

  • 返回空视图

    return new ModelAndView(); // 无视图名,需手动设置
    
  • 重定向或转发

    return new ModelAndView("redirect:/anotherUrl"); // 重定向
    return new ModelAndView("forward:/anotherUrl");  // 转发
    

6. 对比其他返回类型

  • String:直接返回视图名(需配合 @ResponseBody 或视图解析器)。
  • Map:隐式转换为 Model,但无法直接设置视图名。
  • ModelAndView最灵活,明确分离模型和视图逻辑。

总结

ModelAndView 的核心是通过一个对象同时管理模型数据和视图信息,适用于需要 显式控制视图动态传递数据 的场景。其关键步骤为:

  1. 创建 ModelAndView 对象并指定视图名。
  2. 使用 addObject() 添加模型数据。
  3. 返回对象,由 Spring 自动处理渲染。

你可能感兴趣的:(后端技术,开发语言,spring,java,后端)