一、返回ModelAndView(视图+数据)
若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回ModelAndView较好。在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而不跳转资源(比如对页面的Ajax异步响应),此时若返回ModelAndView,总有一部分多余,要么Model多余,要么View多余,此时返回ModelAndView不合适。
二、返回String(视图)
内部资源视图名
在Controller方法中直接返回内部资源视图的名称字符串,如下
@RequestMapping("/toUserList.do")
public String toUserList() throws Exception {
return "/WEB-INF/jsp/success.jsp";
}
注意返回String时可以配合内部资源视图解析器配置的前缀和后缀一起使用。也可以返回视图对象名,配合XmlViewResolver视图解析器来使用。
三、返回void
1:通过ServletAPI来传递数据并完成跳转。
2:使用Ajax的时候,不需要有返回值。
四、返回Object
区分String是数据还是视图,看处理器方法的上面是否有@ResponseBody注解,有代表数据;无代表视图
处理器方法也可以返回Object对象。但返回的Obejct对象不是作为视图来出现的,而是作为数据在页面直接显示的。返回Object对象,需要配合@ResponseBody注解来使用。如下:
@ResponseBody:将数据输出到浏览器(输出到应答体中)
@RequestMapping("/toUserList.do")
@ResponseBody
public String toUserList() throws Exception {
return "hello SpringMVC HttpMessageConverter";
}
但是此时的Response中Content-Type:text/plain;charset=ISO-8859-1,从而出现中文乱码情况,通过下面方式对服务端进行编码
@RequestMapping(value="some.do",produces="text/plain;charset=utf-8")
<mvc:annotation-driven />
五、面试题
如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
答:直接在方法的形参声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。