首页 > 学院 > 开发设计 > 正文

spring处理方法返回值的类型

2019-11-14 23:08:50
字体:
来源:转载
供稿:网友
sPRing处理方法返回值的类型

spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void。下面将对具体的一一进行说明:

ModeAndView:

    @RequestMapping("/show1") public ModelAndView show1(HttpServletRequest request,            HttpServletResponse response) throws Exception {        ModelAndView mav = new ModelAndView("/demo2/show");        mav.addObject("account", "account -1");        return mav;    }

通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 , 使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。

Model:

@RequestMapping("/demo2/show")    public Map<String, String> getMap() {        Map<String, String> map = new HashMap<String, String>();        map.put("key1", "value-1");        map.put("key2", "value-2");        return map;    }

Map:

@RequestMapping("/demo2/show")    public Map<String, String> getMap() {        Map<String, String> map = new HashMap<String, String>();        map.put("key1", "value-1");        map.put("key2", "value-2");        return map;    }

jsp页面中可直通过${key1}获得到值, map.put()相当于request.setAttribute方法。

String:

@RequestMapping(value = "/something", method = RequestMethod.GET)@ResponseBodypublic String helloWorld()  {return "Hello World";}

String 指定返回的视图页面名称,结合设置的返回地址路径加上页面名称后缀即可访问到。注意:如果方法声明了注解@ResponseBody ,则会直接将返回值输出到页面。

Void:

@RequestMapping("/welcome")public void welcomeHandler() {}

如果返回值为空,则响应的视图页面对应为访问地址。

以上内容来自:http://flyer2010.VEvb.com/blog/1294400


Spring Web MVC 提供Model、Map或ModelMap让我们能去暴露渲染视图需要的模型数据。

@RequestMapping(value = "/model")public String createUser(Model model, Map model2, ModelMap model3) {    model.addAttribute("a", "a");    model2.put("b", "b");    model3.put("c", "c");    System.out.println(model == model2);    System.out.println(model2 == model3);    return "success";}

虽然此处注入的是三个不同的类型(Model model, Map model2, ModelMap model3),但三者是同一个对象,如图所示:

AnnotationMethodHandlerAdapter和RequestMappingHandlerAdapter将使用BindingAwareModelMap作为模型对象的实现,即此处我们的形参(Model model, Map model2, ModelMap model3)都是同一个BindingAwareModelMap实例。

此处还有一点需要我们注意:

@RequestMapping(value = "/mergeModel")public ModelAndView mergeModel(Model model) {    model.addAttribute("a", "a");//①添加模型数据    ModelAndView mv = new ModelAndView("success");    mv.addObject("a", "update");//②在视图渲染之前更新③处同名模型数据    model.addAttribute("a", "new");//③修改①处同名模型数据    //视图页面的a将显示为"update" 而不是"new"    return mv;}

从代码中我们可以总结出功能处理方法的返回值中的模型数据(如ModelAndView)会 合并 功能处理方法形式参数中的模型数据(如Model),但如果两者之间有同名的,返回值中的模型数据会覆盖形式参数中的模型数据。

以上内容来自:http://jinnianshilongnian.VEvb.com/blog/1698916


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表