springmvc-210803-03—处理器方法的返回值
返回 ModelAndView
返回 ModelAndView:
有数据和视图,对视图执行forward操作。
若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时处理器方法返回 ModelAndView 比较好。
当然,若要返回 ModelAndView,则处理器方法中需要定义 ModelAndView 对象。
在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何资源跳转(如对页面的 Ajax 异步响应),
此时若返回 ModelAndView,
则将总是有一部分多余:要么 Model 多余,要么 View 多余。
即此时返回 ModelAndView 将不合适。
返回 String
返回 String:
表示视图,
可以是逻辑名称,也可以是完成视图路径。
返回 void
返回 void:
不能表示数据,也不能表示视图。
处理器方法返回 void 的应用场景,AJAX 响应。
返回对象 Object
返回对象 Object:
处理器方法也可以返回 Object 对象。这个 Object 可以是 Integer,String,自定义对象,Map,List 等。
返回的Object表示数据,和视图无关。
可以使用对象表示数据,响应ajax请求。
目前做ajax,主要使用json的数据格式。
实现步骤:
1) 加入处理json的依赖,springmvc默认使用jackson。
2) 在springmvc配置文件中加入<mvc:annotation-driven>注册驱动。
3) 在处理方法上面加入注解@ResponseBody
处理器对象返回Object,转为json输入到浏览器,响应ajax的原理:
1. <mvc:annotation-driven>注册驱动
相当于:json = om.writeValueAsString(student);
<mvc:annotation-driven>在加入springmvc配置文件后,
会自动创建HttpMessageConverter接口的7个实现类,
包括MappingJackson2HttpMessageConverter(使用jackson工具库中的ObjectMapper实现java对象转为json字符串)
注册驱动实现的功能是:完成java对象到json,xml,text,二进制等数据格式的转换。
HttpMessageConverter接口:
消息转换器。
功能:定义了java转为json,xml等数据格式的方法,这个接口有很多实现类。
这两个方法是控制器类把结果输出给浏览器时使用的:
boolean canWrite(Class<?> var1, @Nullable MediaType var2);
void write(T var1, @Nullable MediaType var2, HttpOutputMessage var3)
例如:
public Student doReturnView(HttpServletRequest request,String name,Integer age){
Student student = new Student();
student.setU_name("Tom");
student.setU_age(22);
return student;
}
1) canWrite作用检查处理器方法的返回值,能否转为var2表示数据。
检查student(Tom,22)能否转为var2表示的数据格式,
如果检查能转为json,canWrite返回true。
MediaType:表示数据格式,比如:json,xml等。
2) write:把处理器方法的返回值对象,调用jackson中的ObjectMapper转为json字符串,
相当于:json = om.writeValueAsString(student);
2. 注解@ResponseBody
放在处理器方法上面,通过HttpServletResponse输出数据,响应ajax请求。
相当于:
PrintWriter pw = response.getWriter();
pw.print(json);
pw.flush();
pw.close();
没有加入注解驱动标签<mvc:annotation-driven /> 时的状态
org.springframework.http.converter.ByteArrayHttpMessageConverter
org.springframework.http.converter.StringHttpMessageConverter
org.springframework.http.converter.xml.SourceHttpMessageConverter
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
加入注解驱动标签时<mvc:annotation-driven />的状态
org.springframework.http.converter.ByteArrayHttpMessageConverter
org.springframework.http.converter.StringHttpMessageConverter
org.springframework.http.converter.ResourceHttpMessageConverter
org.springframework.http.converter.ResourceRegionHttpMessageConverter
org.springframework.http.converter.xml.SourceHttpMessageConverter
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
HttpMessageConverter接口实现类